--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Commit 3c2979b6c2e5d643eb5037b8e6347d42936e3e3d
Parents : 025e61e
Author : Ivan <ivan@quad4.io>
Signature : Invalid signer <e46112d44649266d71fe2193e00a4710>, author is <ivan@quad4.io>
Date : 2026-07-06T13:47:26-05:00
feat(locales): add new UI strings for selection, snapshots, and node management across multiple languages
Changes
9 files changed, 1791 insertions(+), 1487 deletions(-)
Diff
diff --git a/meshchatx/src/frontend/locales/de.json b/meshchatx/src/frontend/locales/de.json
index e8bdb727..82ccb744 100644
--- a/meshchatx/src/frontend/locales/de.json
+++ b/meshchatx/src/frontend/locales/de.json
@@ -406,6 +406,7 @@
"open": "Öffnen",
"close": "Schließen",
"cancel": "Abbrechen",
+ "select": "Auswählen",
"save": "Speichern",
"block": "Blockieren",
"delete": "Löschen",
@@ -1631,7 +1632,22 @@
"showing_range": "Zeige {start} bis {end} von {total} Archiven",
"page_of": "Seite {page} von {total_pages}",
"export_mu": "Als .mu exportieren",
- "export_selected_mu": ".mu exportieren ({count})"
+ "export_selected_mu": ".mu exportieren ({count})",
+ "nodes_title": "Nodes",
+ "snapshots_title": "Snapshots",
+ "select_all": "Select all",
+ "delete_selected": "Delete ({count})",
+ "viewing_archive": "Viewing archive",
+ "select_snapshot": "Select a snapshot to view",
+ "open_live": "Open live",
+ "search_nodes_placeholder": "Search nodes or content...",
+ "no_results": "No results found",
+ "no_archives": "No archives yet",
+ "show_nodes": "Show nodes",
+ "hide_nodes": "Hide nodes",
+ "show_snapshots": "Show snapshots",
+ "hide_snapshots": "Hide snapshots",
+ "delete_snapshot": "Delete snapshot"
},
"docs": {
"title": "Dokumentation",
@@ -2796,7 +2812,21 @@
"micron_wasm_update_err_activate_failed": "Installierte Datei konnte nicht geladen werden (wasm_exec-Kompatibilität prüfen oder anderen Build versuchen). Überschreibung wurde entfernt.",
"micron_wasm_update_toast_installed": "Micron-WASM {tag} installiert.",
"micron_wasm_update_toast_uploaded": "WASM aus Ihrer Datei installiert.",
- "micron_wasm_update_toast_reverted": "Gebündeltes Micron-WASM wiederhergestellt."
+ "micron_wasm_update_toast_reverted": "Gebündeltes Micron-WASM wiederhergestellt.",
+ "tabs": {
+ "general": "General",
+ "general_desc": "Language, appearance, and platform",
+ "messages": "Messages",
+ "messages_desc": "LXMF, stickers, and safety",
+ "network": "Network",
+ "network_desc": "Transport, interfaces, and discovery",
+ "nomad": "Nomad",
+ "nomad_desc": "Archiver and page rendering",
+ "privacy": "Privacy",
+ "privacy_desc": "Data, access, and security",
+ "maintenance": "Maintenance",
+ "maintenance_desc": "Cleanup, export, and import"
+ }
},
"debug": {
"title": "Debug Logs",
@@ -2889,7 +2919,16 @@
"node": "Node",
"blocked_destinations": "Blockierte Ziele",
"banishment_lifted": "Banishment lifted successfully",
- "failed_lift_banishment": "Failed to lift banishment"
+ "failed_lift_banishment": "Failed to lift banishment",
+ "lift_selected": "Lift banishment ({count})",
+ "lift_selected_confirm": "Lift banishment for {count} selected items?",
+ "lift_selected_success": "Lifted banishment for {count} items",
+ "filter_all_types": "All types",
+ "filter_rns": "RNS blackhole",
+ "sort_newest": "Newest first",
+ "sort_oldest": "Oldest first",
+ "sort_name": "Name A-Z",
+ "result_count": "{count} items"
},
"relay_chat": {
"title": "Relais-Chat",
@@ -2966,7 +3005,7 @@
"host_rooms": "Räume",
"host_private": "privat",
"host_delete_room": "Raum löschen",
- "host_no_rooms": "Noch keine Räume. Erstelle unten einen Raum.",
+ "host_no_rooms": "Noch keine Räume.",
"host_room_name": "Raumname",
"host_room_topic": "Thema (optional)",
"host_add_room": "Raum hinzufügen",
@@ -3012,7 +3051,6 @@
"host_members_search": "Mitglieder suchen...",
"host_rooms_search": "Räume suchen...",
"host_rooms_search_empty": "Keine Räume passen zur Suche.",
- "host_no_rooms": "Noch keine Räume.",
"host_moderation_uptime": "{time} Laufzeit",
"host_moderation_members": "{count} Mitglieder",
"host_members_select": "Mitglied auswählen, um Nachrichten anzuzeigen und zu moderieren",
diff --git a/meshchatx/src/frontend/locales/en.json b/meshchatx/src/frontend/locales/en.json
index 55eb4a92..621080d9 100644
--- a/meshchatx/src/frontend/locales/en.json
+++ b/meshchatx/src/frontend/locales/en.json
@@ -406,6 +406,7 @@
"open": "Open",
"close": "Close",
"cancel": "Cancel",
+ "select": "Select",
"save": "Save",
"block": "Banish",
"delete": "Delete",
@@ -1439,6 +1440,20 @@
"message_not_found_in_cache": "Message not found in cache"
},
"settings": {
+ "tabs": {
+ "general": "General",
+ "general_desc": "Language, appearance, and platform",
+ "messages": "Messages",
+ "messages_desc": "LXMF, stickers, and safety",
+ "network": "Network",
+ "network_desc": "Transport, interfaces, and discovery",
+ "nomad": "Nomad",
+ "nomad_desc": "Archiver and page rendering",
+ "privacy": "Privacy",
+ "privacy_desc": "Data, access, and security",
+ "maintenance": "Maintenance",
+ "maintenance_desc": "Cleanup, export, and import"
+ },
"shortcut_saved": "Shortcut saved",
"shortcut_deleted": "Shortcut deleted",
"archived_pages_flushed": "Archived pages flushed.",
@@ -1577,7 +1592,16 @@
"node": "Node",
"blocked_destinations": "Blocked destinations",
"banishment_lifted": "Banishment lifted successfully",
- "failed_lift_banishment": "Failed to lift banishment"
+ "failed_lift_banishment": "Failed to lift banishment",
+ "lift_selected": "Lift banishment ({count})",
+ "lift_selected_confirm": "Lift banishment for {count} selected items?",
+ "lift_selected_success": "Lifted banishment for {count} items",
+ "filter_all_types": "All types",
+ "filter_rns": "RNS blackhole",
+ "sort_newest": "Newest first",
+ "sort_oldest": "Oldest first",
+ "sort_name": "Name A-Z",
+ "result_count": "{count} items"
},
"nomadnet": {
"remove_favourite": "Remove Favourite",
@@ -1720,7 +1744,22 @@
"showing_range": "Showing {start} to {end} of {total} archives",
"page_of": "Page {page} of {total_pages}",
"export_mu": "Export .mu",
- "export_selected_mu": "Export .mu ({count})"
+ "export_selected_mu": "Export .mu ({count})",
+ "nodes_title": "Nodes",
+ "snapshots_title": "Snapshots",
+ "select_all": "Select all",
+ "delete_selected": "Delete ({count})",
+ "viewing_archive": "Viewing archive",
+ "select_snapshot": "Select a snapshot to view",
+ "open_live": "Open live",
+ "search_nodes_placeholder": "Search nodes or content...",
+ "no_results": "No results found",
+ "no_archives": "No archives yet",
+ "show_nodes": "Show nodes",
+ "hide_nodes": "Hide nodes",
+ "show_snapshots": "Show snapshots",
+ "hide_snapshots": "Hide snapshots",
+ "delete_snapshot": "Delete snapshot"
},
"docs": {
"title": "Documentation",
diff --git a/meshchatx/src/frontend/locales/es.json b/meshchatx/src/frontend/locales/es.json
index 093e0cfd..d2943c9e 100644
--- a/meshchatx/src/frontend/locales/es.json
+++ b/meshchatx/src/frontend/locales/es.json
@@ -406,6 +406,7 @@
"open": "Abierto",
"close": "Cerca",
"cancel": "Cancelar",
+ "select": "Seleccionar",
"save": "Guardar",
"block": "Destierro",
"delete": "Suprimir",
@@ -1484,7 +1485,21 @@
"micron_wasm_update_err_activate_failed": "No se pudo cargar el archivo instalado (compruebe compatibilidad con wasm_exec o pruebe otra compilación). Se eliminó la anulación.",
"micron_wasm_update_toast_installed": "Micron WASM {tag} instalado.",
"micron_wasm_update_toast_uploaded": "WASM instalado desde su archivo.",
- "micron_wasm_update_toast_reverted": "Restaurado el WASM Micron incluido."
+ "micron_wasm_update_toast_reverted": "Restaurado el WASM Micron incluido.",
+ "tabs": {
+ "general": "General",
+ "general_desc": "Language, appearance, and platform",
+ "messages": "Messages",
+ "messages_desc": "LXMF, stickers, and safety",
+ "network": "Network",
+ "network_desc": "Transport, interfaces, and discovery",
+ "nomad": "Nomad",
+ "nomad_desc": "Archiver and page rendering",
+ "privacy": "Privacy",
+ "privacy_desc": "Data, access, and security",
+ "maintenance": "Maintenance",
+ "maintenance_desc": "Cleanup, export, and import"
+ }
},
"debug": {
"title": "Debug Logs",
@@ -1577,7 +1592,16 @@
"node": "Node",
"blocked_destinations": "Destinos bloqueados",
"banishment_lifted": "El destierro se levantó con éxito",
- "failed_lift_banishment": "Failed to lift banishment"
+ "failed_lift_banishment": "Failed to lift banishment",
+ "lift_selected": "Levantar destierro ({count})",
+ "lift_selected_confirm": "¿Levantar el destierro de {count} elementos seleccionados?",
+ "lift_selected_success": "Destierro levantado para {count} elementos",
+ "filter_all_types": "Todos los tipos",
+ "filter_rns": "Blackhole RNS",
+ "sort_newest": "Más recientes",
+ "sort_oldest": "Más antiguos",
+ "sort_name": "Nombre A-Z",
+ "result_count": "{count} elementos"
},
"nomadnet": {
"remove_favourite": "Quitar Favorito",
@@ -1720,7 +1744,22 @@
"showing_range": "Mostrando{start}a{end}de archivos{total}",
"page_of": "Página{page}de{total_pages}",
"export_mu": "Export .mu",
- "export_selected_mu": "Export .mu ({count})"
+ "export_selected_mu": "Export .mu ({count})",
+ "nodes_title": "Nodes",
+ "snapshots_title": "Snapshots",
+ "select_all": "Select all",
+ "delete_selected": "Delete ({count})",
+ "viewing_archive": "Viewing archive",
+ "select_snapshot": "Select a snapshot to view",
+ "open_live": "Open live",
+ "search_nodes_placeholder": "Search nodes or content...",
+ "no_results": "No results found",
+ "no_archives": "No archives yet",
+ "show_nodes": "Show nodes",
+ "hide_nodes": "Hide nodes",
+ "show_snapshots": "Show snapshots",
+ "hide_snapshots": "Hide snapshots",
+ "delete_snapshot": "Delete snapshot"
},
"docs": {
"title": "Documentación",
@@ -2966,7 +3005,7 @@
"host_rooms": "salas",
"host_private": "privada",
"host_delete_room": "Eliminar sala",
- "host_no_rooms": "Aún no hay salas. Crea una sala abajo.",
+ "host_no_rooms": "Aún no hay salas.",
"host_room_name": "nombre de sala",
"host_room_topic": "tema (opcional)",
"host_add_room": "Añadir sala",
@@ -3012,7 +3051,6 @@
"host_members_search": "Buscar miembros...",
"host_rooms_search": "Buscar salas...",
"host_rooms_search_empty": "Ninguna sala coincide con la búsqueda.",
- "host_no_rooms": "Aún no hay salas.",
"host_moderation_uptime": "{time} en ejecución",
"host_moderation_members": "{count} miembros",
"host_members_select": "Selecciona un miembro para ver mensajes y moderar",
diff --git a/meshchatx/src/frontend/locales/fi.json b/meshchatx/src/frontend/locales/fi.json
index 2ceafb79..975035e7 100644
--- a/meshchatx/src/frontend/locales/fi.json
+++ b/meshchatx/src/frontend/locales/fi.json
@@ -1,922 +1,922 @@
{
"_languageName": "Suomi",
"bots": {
- "title": "LXMFy Bots",
- "description": "Run simple LXMF bots (echo, notes, reminders) when the LXMFy add-on is installed.",
- "bot_framework": "Bot Framework",
- "lxmfy_not_detected": "LXMFy not detected",
- "lxmfy_not_detected_desc": "To use bots, you must install the LXMFy package:",
- "install_via_pip": "Install via pip",
- "create_new_bot": "Create New Bot",
- "running_bots": "Running Bots",
- "no_bots_running": "No bots are currently running.",
- "select": "Select",
- "start_bot": "Start Bot",
- "stop_bot": "Stop Bot",
- "restart_bot": "Restart Bot",
- "saved_bots": "Saved Bots",
- "bot_name": "Bot Name",
- "cancel": "Cancel",
- "bot_started": "Bot started successfully",
- "bot_stopped": "Bot stopped",
- "start_pending": "Starting bot… LXMF and Reticulum can take a moment.",
- "stop_pending": "Stopping bot…",
- "restart_pending": "Restarting bot… this may take a moment.",
- "bot_ready": "Bot is up and running.",
- "failed_to_start": "Failed to start bot",
- "failed_to_stop": "Failed to stop bot",
- "delete_bot": "Delete Bot",
- "export_identity": "Export Identity",
- "bot_deleted": "Bot deleted successfully",
- "failed_to_delete": "Failed to delete bot",
- "more_bots_coming": "More bots coming soon!",
- "chat_with_bot": "Chat",
- "lxmf_address": "LXMF address",
- "last_announce": "Last announce",
- "never_announced": "Not seen on this node yet",
- "address_pending": "Not available until the bot has started once",
- "status_running": "Running",
- "status_stopped": "Stopped",
- "force_announce": "Announce now",
- "edit_name": "Edit name",
- "bot_renamed": "Bot name saved",
- "rename_failed": "Could not save name",
- "name_required": "Enter a name",
- "announce_triggered": "Announce requested",
- "announce_failed": "Could not request announce",
- "last_error_heading": "Last error",
- "view_process_log": "Process log (debug)",
- "process_log_title": "Bot process log",
- "process_log_empty": "No log output yet for this bot.",
- "process_log_truncated": "Only the end of the log is shown. The full file on disk is larger.",
- "process_log_loading": "Loading log…",
- "process_log_failed": "Could not load process log",
- "process_log_copied": "Log copied to clipboard",
- "copy_process_log": "Copy log"
+ "title": "LXMFy-botit",
+ "description": "Suorita yksinkertaisia LXMF-botteja (kaiku, muistiinpanot, muistutukset), kun LXMFy-liitännäinen on asennettu.",
+ "bot_framework": "Bottikehys",
+ "lxmfy_not_detected": "LXMFy ei havaittu",
+ "lxmfy_not_detected_desc": "Asenna LXMFy-paketti käyttääksesi botteja.",
+ "install_via_pip": "pip-asennus",
+ "create_new_bot": "Luo uusi botti",
+ "running_bots": "Käynnissä olevat botit",
+ "no_bots_running": "Ei botteja käynnissä.",
+ "select": "Valitse",
+ "start_bot": "Käynnistä botti",
+ "stop_bot": "Pysäytä botti",
+ "restart_bot": "Käynnistä botti uudelleen",
+ "saved_bots": "Tallennetut botit",
+ "bot_name": "Botin nimi",
+ "cancel": "Peru",
+ "bot_started": "Botin käynnistys onnistui",
+ "bot_stopped": "Botti pysäytetty",
+ "start_pending": "Käynnistetään bottia... LXMF:llä ja Reticulumilla menee hetki.",
+ "stop_pending": "Pysäytetään bottia",
+ "restart_pending": "Pysäytetään bottia... tähän voi mennä hetki.",
+ "bot_ready": "Botti on käynnissä",
+ "failed_to_start": "Botin käynnistys epäonnistui",
+ "failed_to_stop": "Botin pysäytys epäonnistui",
+ "delete_bot": "Poista botti",
+ "export_identity": "Vie identiteetti",
+ "bot_deleted": "Botin poisto onnistui",
+ "failed_to_delete": "Botin poisto epäonnistui",
+ "more_bots_coming": "Lisää botteja tulossa!",
+ "chat_with_bot": "Keskustele",
+ "lxmf_address": "LXMF-kohde",
+ "last_announce": "Viimeisin kuulutus",
+ "never_announced": "Ei vielä nähty tässä solmussa",
+ "address_pending": "Ei saatavilla ennen botin ensimmäistä käynnistystä",
+ "status_running": "Käynnissä",
+ "status_stopped": "Pysäytetty",
+ "force_announce": "Kuuluta nyt",
+ "edit_name": "Muokkaa nimeä",
+ "bot_renamed": "Botin nimi tallennettu",
+ "rename_failed": "Nimen tallennus epäonnistui",
+ "name_required": "Anna nimi",
+ "announce_triggered": "Kuulutus pyydetty",
+ "announce_failed": "Kuulutusta ei voitu pyytää",
+ "last_error_heading": "Viimeisin virhe",
+ "view_process_log": "Prosessiloki (debug)",
+ "process_log_title": "Botin prosessiloki",
+ "process_log_empty": "Botin loki on tyhjä.",
+ "process_log_truncated": "Vain lokin loppu näytetään. Levyllä oleva tiedosto on suurempi.",
+ "process_log_loading": "Ladataan lokia…",
+ "process_log_failed": "Prosessilokin lataus epäonnistui",
+ "process_log_copied": "Loki kopioitu leikepöydälle",
+ "copy_process_log": "Kopioi loki"
},
"app": {
"name": "Reticulum MeshChatX",
- "sync_messages": "Sync Messages",
- "compose": "Compose",
- "messages": "Messages",
- "contacts": "Contacts",
- "relay_chat": "Relay Chat",
- "nomad_network": "Nomad Network",
- "map": "Map",
- "archives": "Archives",
- "propagation_nodes": "Propagation Nodes",
- "network_visualiser": "Network Visualiser",
- "interfaces": "Interfaces",
- "tools": "Tools",
- "settings": "Settings",
- "identities": "Identities",
- "documentation": "Documentation",
- "about": "About",
- "changelog_title": "What's New",
- "do_not_show_again": "Do not show again for this version",
- "do_not_show_ever": "Do not show ever again",
- "tutorial_title": "Getting Started",
- "tutorial_welcome": "Welcome to MeshChatX",
- "tutorial_connect": "Connect to the Mesh",
- "tutorial_finish": "Ready to Roll!",
- "tutorial_restart_required": "Restart Required",
- "tutorial_docker_note": "If you're running in Docker, ensure you restart the container.",
- "my_identity": "My Identity",
- "identity_hash": "Identity Hash",
- "lxmf_address": "LXMF Address",
- "announce": "Announce",
- "announce_now": "Announce Now",
- "show_qr": "Show QR Code",
- "failed_announce": "failed to announce",
- "announce_sent": "Announcement sent",
- "notifications_no_new": "No new notifications",
- "notifications_empty_history": "No notification history",
- "notifications_history_title": "Recent notification history",
- "last_announced": "Last announced: {time}",
- "last_announced_never": "Last announced: Never",
- "display_name_placeholder": "Display Name",
- "profile": "Profile",
- "manage_identity": "Manage your identity, transport participation and LXMF defaults.",
- "theme": "Theme",
- "theme_mode": "{mode} mode",
- "transport": "Transport",
- "enabled": "Enabled",
- "disabled": "Disabled",
- "propagation": "Propagation",
- "local_node_running": "Local node running",
- "client_only": "Client-only",
- "copy": "Copy",
- "appearance": "Appearance",
- "appearance_description": "Switch between light and dark presets anytime.",
- "messages_sidebar_position": "Messages sidebar",
- "messages_sidebar_position_left": "Left",
- "messages_sidebar_position_right": "Right",
- "ui_transparency": "Background transparency",
- "ui_transparency_description": "Increases transparency on the main background. Side panels stay solid for readability.",
- "ui_glass_enabled": "Glass effect",
- "ui_glass_enabled_description": "Adds a frosted blur effect to cards. When off, cards use solid colors.",
- "messages_multi_pane_enabled": "Messages split view",
- "messages_multi_pane_enabled_description": "Show multiple conversations side by side on larger screens. Drag a conversation onto a pane to open it there.",
- "nomad_tabs_enabled": "NomadNet browser tabs",
- "nomad_tabs_enabled_description": "Open multiple NomadNet pages in tabs on larger screens.",
- "rrc_enabled": "Relay Chat",
- "rrc_enabled_description": "Enable relay chat, hub discovery, and hosting. When off, relay chat is hidden and hub announces are ignored.",
- "reset_appearance_defaults": "Reset appearance to defaults",
- "light_theme": "Light Theme",
- "dark_theme": "Dark Theme",
- "live_preview": "Live preview updates instantly.",
- "realtime": "Realtime",
- "transport_mode": "Transport Mode",
- "transport_description": "Relay paths and traffic for nearby peers.",
- "enable_transport_mode": "Enable Transport Mode",
- "transport_toggle_description": "Route announces, respond to path requests and help your mesh stay online.",
- "requires_restart": "Requires restart after toggling.",
- "show_community_interfaces": "Show Community Interfaces",
- "community_interfaces_description": "Show community-maintained presets when adding new interfaces.",
- "reliability": "Reliability",
+ "sync_messages": "Synkronoi viestit",
+ "compose": "Kirjoita",
+ "messages": "Viestit",
+ "contacts": "Yhteystiedot",
+ "relay_chat": "Keskustelukanavat",
+ "nomad_network": "Nomad-verkko",
+ "map": "Kartta",
+ "archives": "Arkisto",
+ "propagation_nodes": "Levityssolmut (propagation nodes)",
+ "network_visualiser": "Verkon havainnollistaja",
+ "interfaces": "Sovittimet",
+ "tools": "Työkalut",
+ "settings": "Asetukset",
+ "identities": "Identiteetit",
+ "documentation": "Dokumentaatio",
+ "about": "Tietoja",
+ "changelog_title": "Uutta",
+ "do_not_show_again": "Älä näytä uudelleen tässä versiossa",
+ "do_not_show_ever": "Älä näytä koskaan",
+ "tutorial_title": "Aloitus",
+ "tutorial_welcome": "Tervetuloa MeshChatX:ään",
+ "tutorial_connect": "Yhdistä mesh-verkkoon",
+ "tutorial_finish": "Valmis aloittamaan!",
+ "tutorial_restart_required": "Uudelleenkäynnistys vaaditaan",
+ "tutorial_docker_note": "Jos käytät Dockeria, varmista, että käynnistät säiliön uudelleen.",
+ "my_identity": "Identiteettini",
+ "identity_hash": "Identiteetin tiiviste",
+ "lxmf_address": "LXMF-kohde",
+ "announce": "Kuulutus",
+ "announce_now": "Kuuluta nyt",
+ "show_qr": "Näytä QR-koodi",
+ "failed_announce": "Kuulutus epäonnistui",
+ "announce_sent": "Kuulutus lähetetty",
+ "notifications_no_new": "Ei uusia ilmoituksia",
+ "notifications_empty_history": "Ei ilmoitushistoriaa",
+ "notifications_history_title": "Viimeaikainen ilmoitushistoria",
+ "last_announced": "Viimeksi kuulutettu: {time}",
+ "last_announced_never": "Viimeksi kuulutettu: ei koskaan",
+ "display_name_placeholder": "Näyttönimi",
+ "profile": "Profiili",
+ "manage_identity": "Hallinnoi identiteettiäsi, välitykseen osallistumista ja LXMF-oletuksia.",
+ "theme": "Teema",
+ "theme_mode": "{mode} tila",
+ "transport": "Välitys (transport)",
+ "enabled": "Päällä",
+ "disabled": "Poissa käytöstä",
+ "propagation": "Levitys (propagation)",
+ "local_node_running": "Paikallinen solmu käynnissä",
+ "client_only": "Vain asiakas",
+ "copy": "Kopioi",
+ "appearance": "Ulkoasu",
+ "appearance_description": "Vaihda vaaleaa ja tummaa esiasetusta milloin tahansa.",
+ "messages_sidebar_position": "Viestipalkki",
+ "messages_sidebar_position_left": "Vasen",
+ "messages_sidebar_position_right": "Oikea",
+ "ui_transparency": "Taustan läpinäkyvyys",
+ "ui_transparency_description": "Lisää taustan läpinäkyvyyttä. Sivupaneelit pysyvät peittävinä luettavuuden parantamiseksi.",
+ "ui_glass_enabled": "Lasitusefekti",
+ "ui_glass_enabled_description": "Lisää huurre-efekti kortteihin. Jos asetus on pois, korteissa on eheät värit",
+ "messages_multi_pane_enabled": "Viestien jaettu näkymä",
+ "messages_multi_pane_enabled_description": "Näytä useita keskusteluja vierekkäin suurilla näytöillä. Vedä keskustelu ruutuun avataksesi sen siinä.",
+ "nomad_tabs_enabled": "NomadNet-selaimen välilehdet",
+ "nomad_tabs_enabled_description": "Avaa NomadNet-sivut välilehdillä suurilla näytöillä.",
+ "rrc_enabled": "Keskustelukanavat",
+ "rrc_enabled_description": "Kytke päälle keskustelukanavat, keskusten havaitseminen ja isännöinti. Pois kytkettynä keskustelukanavia tai keskusten kuulutuksia ei näytetä.",
+ "reset_appearance_defaults": "Palauta ulkoasun oletukset",
+ "light_theme": "Vaalea teema",
+ "dark_theme": "Tumma teema",
+ "live_preview": "Käytönaikainen esikatselu päivittyy heti.",
+ "realtime": "Reaaliaikainen",
+ "transport_mode": "Välitystila",
+ "transport_description": "Välitä lähimpien vertaisten polkuja ja liikennettä.",
+ "enable_transport_mode": "Kytke välitystila päälle",
+ "transport_toggle_description": "Välitä kuulutuksia, vastaa polkukyselyihin ja vahvista mesh-verkon toimintaa.",
+ "requires_restart": "Valinnan muuttaminen vaatii uudelleenkäynnistyksen.",
+ "show_community_interfaces": "Näytä yhteisön sovittimet",
+ "community_interfaces_description": "Näytä yhteisön ylläpitämät esiasetukset uusia sovittimia lisätessä.",
+ "reliability": "Vakaus",
"lxmf_settings_eyebrow": "LXMF",
- "privacy_eyebrow": "Privacy",
- "privacy_data_title": "Data & device",
- "privacy_data_description": "Manage local message history, telemetry, and other privacy options. Deleting here only affects this device.",
- "privacy_data": "Data & device",
- "privacy_subsection_device": "This device",
- "privacy_subsection_telemetry": "Mesh telemetry",
- "privacy_mode_enabled": "Privacy mode (block external HTTP/HTTPS)",
- "privacy_mode_description": "Blocks map tiles, geocoding, LibreTranslate, firmware downloads, and other outbound HTTP/HTTPS from the app. The browser Content Security Policy is tightened to same-origin only.",
- "web_exposure_title": "Network exposure",
- "web_exposure_description": "The web UI bind address is set at startup via --host or MESHCHAT_HOST. Restrict who can reach it when not bound to loopback.",
- "web_listen_address": "Current bind address",
+ "privacy_eyebrow": "Yksityisyys",
+ "privacy_data_title": "Laite ja tiedot",
+ "privacy_data_description": "Hallinnoi paikallista viestihistoriaa, käyttötietoja ja yksityisyysasetuksia. Poistaminen vaikuttaa vain tähän laitteeseen.",
+ "privacy_data": "Laite ja tiedot",
+ "privacy_subsection_device": "Tämä laite",
+ "privacy_subsection_telemetry": "Mesh-verkon käyttötiedot",
+ "privacy_mode_enabled": "Yksityisyystila (estä ulkoinen HTTP/HTTPS)",
+ "privacy_mode_description": "Estää karttalaatat, geokoodaukset, LibreTranslate, laiteohjelmistolataukset, ja muut lähtevät HTTP/HTTPS-yhteydet sovelluksesta. Selaimen sisällön turvallisuuskäytäntö (CSP) kiristetään sallimaan vain samasta lähteestä oleva liikenne.",
+ "web_exposure_title": "Verkon näkyvyys",
+ "web_exposure_description": "Verkkokäyttöliittymän sidososoite luodaan käynnistyksessä asettamalla --host tai MESHCHAT_HOST. Rajoita pääsyä, jos osoite ei ole sidottu paluusilmukkaan.",
+ "web_listen_address": "Nykyinen sidososoite",
"web_listen_https": "HTTPS",
- "web_exposure_warning_title": "This instance is reachable beyond localhost",
- "web_exposure_warning_body": "Binding to a non-loopback address exposes the web UI on your network. Enable authentication, restrict the port with a firewall, and prefer access over a VPN you control.",
- "web_exposure_check_auth": "Authentication enabled",
- "web_exposure_check_auth_off": "Authentication is disabled",
- "web_exposure_check_firewall": "I restricted port access with a firewall or bind rules",
- "web_exposure_check_vpn": "Remote access is only via a VPN I control",
- "web_ui_ip_allowlist": "Web UI IP allowlist",
- "web_ui_ip_allowlist_description": "Optional comma-separated IPs or CIDR ranges (for example 127.0.0.1/32, 192.168.1.0/24). Empty allows all clients.",
+ "web_exposure_warning_title": "Tätä instanssi on saavutettavissa tämän laitteen ulkopuolelta",
+ "web_exposure_warning_body": "Jos sidot johonkin muuhun kuin paluusilmukkaosoitteeseen, käyttöliittymää voidaan käyttää verkosta. Kytke todennus päälle, rajoita porttien käyttöä palomuurilla ja käytä itse hallinnoimaasi VPN-yhteyttä jos mahdollista.",
+ "web_exposure_check_auth": "Todennus käytössä",
+ "web_exposure_check_auth_off": "Todennus pois käytöstä",
+ "web_exposure_check_firewall": "Rajoitin porttien saavutettavuutta palomuurilla tai porttisidossäännöillä",
+ "web_exposure_check_vpn": "Ulkopuolinen käyttö on mahdollista vain hallinnoimani VPN:n välityksellä",
+ "web_ui_ip_allowlist": "Verkkokäyttöliittymän sallittujen IP-osoitteiden listaus",
+ "web_ui_ip_allowlist_description": "Valinnainen pilkuilla erotettujen IP-osoitteiden tai CIDR-välien lista (esimerkiksi 127.0.0.1/32, 192.168.1.0/24). Tyhjänä kaikki asiakkaat sallitaan.",
"web_ui_ip_allowlist_placeholder": "127.0.0.1/32, ::1/128, 192.168.0.0/16",
- "landlock_status": "Landlock sandbox (Linux)",
- "landlock_active": "Active",
- "landlock_inactive": "Not active",
- "landlock_auto_enabled": "Enabled automatically on this Linux kernel",
- "landlock_kernel_unsupported": "Kernel does not support Landlock (5.13+ required)",
- "landlock_disabled_by_env": "Disabled via MESHCHAT_LANDLOCK=0",
- "settings_map_eyebrow": "Map",
- "messages_description": "Configure how MeshChat handles message delivery failures. Control automatic retry behavior, attachment retransmission, and fallback mechanisms to ensure reliable message delivery across the mesh network.",
- "auto_resend_title": "Auto resend when peer announces",
- "auto_resend_description": "Failed messages automatically retry once the destination broadcasts again.",
- "retry_attachments_title": "Allow retries with attachments",
- "retry_attachments_description": "Large payloads will also be retried (useful when both peers have high limits).",
- "auto_fallback_title": "Auto fall back to propagation node",
- "auto_fallback_description": "Failed direct deliveries are queued on your preferred propagation node.",
- "inbound_stamps_required_title": "Require inbound stamps",
- "inbound_stamps_required_description": "When off, direct messages to you do not require proof-of-work stamps. When on, set the stamp cost below. Higher values mean more work for senders.",
- "inbound_stamp_cost": "Inbound Message Stamp Cost",
- "inbound_stamp_description": "Proof-of-work difficulty for direct messages. Range: 1-254. Default: 8.",
- "flood_protection": "Flood Protection",
- "flood_protection_description": "Automatically raise the inbound stamp cost when receiving too many messages per minute from many sources. This makes coordinated spam attacks computationally expensive while keeping normal conversations affordable.",
- "flood_protection_enabled": "Enable auto-adjusting stamp cost",
- "flood_threshold": "Messages per minute threshold",
- "flood_max_stamp_cost": "Maximum stamp cost during flood",
- "flood_cooldown": "Cooldown before lowering cost (seconds)",
- "local_message_auto_delete_title": "Delete old messages on this device",
- "local_message_auto_delete_description": "Removes messages from the local database after the age you set. This only affects this device and no data is deleted from the network.",
- "local_message_auto_delete_age": "Delete messages older than",
- "local_message_auto_delete_unit_aria": "Time unit for message retention",
- "local_message_auto_delete_unit_days": "days",
- "local_message_auto_delete_unit_months": "months (30 days each)",
- "local_message_auto_delete_month_note": "Months are counted as 30 days each. Disabled by default.",
- "browse_nodes": "Browse Nodes",
- "propagation_nodes_description": "Keep conversations flowing even when peers are offline.",
- "nodes_info_1": "Propagation nodes hold messages securely until recipients sync again.",
- "nodes_info_2": "Nodes peer with each other to distribute encrypted payloads.",
- "nodes_info_3": "Most nodes retain data ~30 days, then discard undelivered items.",
- "run_local_node": "Run a local propagation node",
- "run_local_node_description": "MeshChat will announce and maintain a node using this local destination hash.",
- "preferred_propagation_node": "Preferred Propagation Node",
- "preferred_node_placeholder": "Destination hash, e.g. a39610c89d18bb48c73e429582423c24",
- "fallback_node_description": "Messages fallback to this node whenever direct delivery fails.",
- "auto_select_node": "Auto-select best node",
- "auto_select_node_description": "Automatically find and switch to the best available propagation node based on network hops.",
- "auto_select_using_label": "Using propagation node",
- "auto_select_pending": "No propagation node selected yet. The app will choose one when available.",
- "incoming_message_size": "Incoming message size",
- "incoming_message_size_description": "Maximum size for one direct LXMF delivery you will accept.",
+ "landlock_status": "Landlock-hiekkalaatikko (Linux)",
+ "landlock_active": "Käytössä",
+ "landlock_inactive": "Pois käytöstä",
+ "landlock_auto_enabled": "Automaattisesti päällä tällä Linux-ytimellä",
+ "landlock_kernel_unsupported": "Ydin ei tue Landlockia (5.13+ vaaditaan)",
+ "landlock_disabled_by_env": "Poissa käytöstä asetuksella MESHCHAT_LANDLOCK=0",
+ "settings_map_eyebrow": "Kartta",
+ "messages_description": "Määritä, miten MeshChatX käsittelee viestien toimitushäiriöitä. Hallitse automaattisen viestien ja liitteiden uudelleenlähetyksen käytäntöjä ja varamekanismeja luotettavan viestien lähettämisen takaamiseksi.",
+ "auto_resend_title": "Lähetä automaattisesti uudelleen, kun kohde kuuluttaa.",
+ "auto_resend_description": "Epäonnistuneet viestit yritetään lähettää uudelleen heti, kun viestin kohde kuuluttaa läsnäolonsa uudelleen.",
+ "retry_attachments_title": "Salli liitteiden uudelleenlähetys",
+ "retry_attachments_description": "Myös suuret viestit lähetetään uudelleen (hyödyllinen, kun molemmilla osallistujilla on korkeat vastaanottorajat).",
+ "auto_fallback_title": "Peräänny automaattisesti levityssolmuun",
+ "auto_fallback_description": "Jos suora lähetys epäonnistuu, viestit lähetetään odottamaan oletuksena valittuun levityssolmuun myöhempää toimittamista varten.",
+ "inbound_stamps_required_title": "Vaadii saapuvilta leimat",
+ "inbound_stamps_required_description": "Pois kytkettynä saapuvilta viesteiltä ei vaadita proof-of-work (PoW) -leimaa. Päällä ollessa viesteiltä vaaditaan alla asetettu kustannus. Korkeampi arvo vaatii enemmän työtä viestin lähettäjältä.",
+ "inbound_stamp_cost": "Saapuvan viestin leiman kustannut",
+ "inbound_stamp_description": "Proof-of-work -vaikeus suorille viesteille. Väli: 1-254. Oletus: 8.",
+ "flood_protection": "Tulvasuoja",
+ "flood_protection_description": "Nosta saapuvien viestien leiman kustannustasoa automaattisesti, kun viestejä saapuu liikaa minuutin aikana. Tämä vaikeuttaa roskapostihyökkäysten tekemistä, mutta normaali viestintä onnistuu silti.",
+ "flood_protection_enabled": "Kytke päälle leiman automaattinen säätö",
+ "flood_threshold": "Viestejä minuutissa -kynnys",
+ "flood_max_stamp_cost": "Korkein leiman hinta tulvan aikana",
+ "flood_cooldown": "Jäähdytysaika ennen hinnan laskemista (sekuntia)",
+ "local_message_auto_delete_title": "Poista vanhat viestit tältä laitteelta",
+ "local_message_auto_delete_description": "Poistaa asetettua rajaa vanhemmat viestit laitteelta. Tämä vaikuttaa vain tähän laitteeseen eikä mitään dataa poisteta verkosta.",
+ "local_message_auto_delete_age": "Poista viestit, jotka ovat vanhempia kuin",
+ "local_message_auto_delete_unit_aria": "Aikayksikkö viestien säilyttämiselle",
+ "local_message_auto_delete_unit_days": "päivää",
+ "local_message_auto_delete_unit_months": "kuukautta (30 päivää per kuukausi)",
+ "local_message_auto_delete_month_note": "Kuukaudet lasketaan 30 päivän paloina. Oletuksena pois päältä.",
+ "browse_nodes": "Selaa solmuja",
+ "propagation_nodes_description": "Pidä keskustelut käynnissä, vaikka muut ovat poissa verkosta.",
+ "nodes_info_1": "Levityssolmut säilövät viestejä turvallisesti, kunnes vastaanottajat synkronoivat viestinsä.",
+ "nodes_info_2": "Solmut jakavat toisilleen salatut viestisisällöt.",
+ "nodes_info_3": "Useimmat solmut säilövät tietoja noin kuukauden, minkä jälkeen toimittamattomat merkinnät poistetaan.",
+ "run_local_node": "Ylläpidä paikallista levityssolmua",
+ "run_local_node_description": "MeshChatX kuuluttaa ja ylläpitää solmua tämän tiivisteen kohteessa.",
+ "preferred_propagation_node": "Suosittu levityssolmu",
+ "preferred_node_placeholder": "Kohteen tiiviste, esim. a39610c89d18bb48c73e429582423c24",
+ "fallback_node_description": "Viestit palautuvat tähän solmuun, kun suora toimitus epäonnistuu.",
+ "auto_select_node": "Valitse paras solmu automaattisesti",
+ "auto_select_node_description": "Etsi ja valitse automaattisesti lähin saatavilla oleva levityssolmu.",
+ "auto_select_using_label": "Käytettävä levityssolmu",
+ "auto_select_pending": "Levityssolmua ei vielä asetettu. Sovellus asettaa solmun, kun sellainen tulee saataville.",
+ "incoming_message_size": "Saapuvan viestin koko",
+ "incoming_message_size_description": "Suoraan saapuvan LXMF-viestin suurin sallittu koko.",
"incoming_message_size_1mb": "1 MB",
"incoming_message_size_10mb": "10 MB",
"incoming_message_size_25mb": "25 MB",
"incoming_message_size_50mb": "50 MB",
"incoming_message_size_1gb": "1 GB",
- "incoming_message_size_custom": "Custom",
+ "incoming_message_size_custom": "Mukautettu",
"incoming_message_size_unit_mb": "MB",
"incoming_message_size_unit_gb": "GB",
- "auto_sync_interval": "Auto Sync Interval",
- "last_synced": "Last synced {time} ago.",
- "last_synced_never": "Last synced: never.",
- "propagation_stamp_cost": "Propagation Node Stamp Cost",
- "propagation_stamp_description": "Require proof-of-work stamps for messages sent through your node. Higher values require more work. Range: 13-254. Default: 16. **Note:** Changing this requires a restart.",
- "language": "Language",
- "select_language": "Select your preferred language.",
- "tagline": "All-in-one Reticulum client",
- "open": "Open",
- "identity": "Identity",
- "lxmf_address_hash": "LXMF Address Hash",
- "propagation_node_status": "Propagation Node Status",
- "last_sync": "Last Sync: {time} ago",
- "last_sync_never": "Last Sync: never",
- "syncing": "Syncing...",
- "synced": "Synced",
- "not_synced": "Not Synced",
- "not_configured": "Not Configured",
- "toggle_source": "Toggle Source Code",
- "audio_calls": "Telephone",
- "calls": "Calls",
- "status": "Status",
- "active_call": "Active Call",
- "incoming": "Incoming",
- "outgoing": "Outgoing",
- "call": "Call",
- "calls_plural": "Calls",
- "hop": "hop",
- "hops_plural": "hops",
- "hung_up_waiting": "Hung up, waiting for call...",
- "view_incoming_calls": "View Incoming Calls",
- "hangup_all_calls": "Hangup all Calls",
- "clear_history": "Clear History",
- "no_active_calls": "No active calls",
- "incoming_call": "Incoming call...",
- "outgoing_call": "Outgoing call...",
- "call_active": "Active",
- "call_ended": "Ended",
- "propagation_node": "Propagation Node",
- "sync_now": "Sync Now",
- "setting_auto_saved": "Setting {label} auto-saved",
- "backup_max_count": "Automatic backup limit",
- "message_font_size": "Message font size",
- "message_icon_size": "Icon size",
- "detailed_outbound_send_status": "Detailed outbound send status",
- "detailed_outbound_send_status_description": "Show detailed status like pathfinding, stamp solving, and technical tooltips while sending. When off, a simple checkmark is shown.",
- "outbound_transfer_progress_enabled": "Show transfer progress bar",
- "outbound_transfer_progress_enabled_description": "Show a progress bar with transfer speed, hops, and elapsed time below outbound messages while they are sending.",
- "message_timestamp_grouping": "Group message timestamps",
- "message_timestamp_grouping_description": "When on, messages are grouped by date and timestamps are simplified. When off, every message shows its exact time.",
- "search_settings": "Search settings...",
- "auto_resend": "Auto Resend",
- "retry_attachments": "Retry Attachments",
- "auto_fallback": "Auto Fallback",
- "community_interfaces": "Community Interfaces",
- "preferred_node": "Preferred Node",
- "local_node": "Local Node",
- "auto_sync": "Auto Sync",
- "inbound_stamp_cost_label": "Inbound Stamp Cost",
- "propagation_stamp_cost_label": "Propagation Stamp Cost",
- "page_archiver": "Page Archiver",
- "smart_crawler": "Smart Crawler",
- "authentication": "Authentication",
- "stranger_protection": "Stranger Protection",
- "stranger_protection_description": "Control how the app handles messages and attachments from unknown peers.",
- "block_stranger_attachments": "Block Attachments from Strangers",
- "block_stranger_attachments_description": "Automatically remove file, image, and audio attachments from people not in your contacts. Text messages are still delivered.",
- "block_all_from_strangers": "Block Everything from Strangers",
- "block_all_from_strangers_description": "Ignore all messages, attachments, and calls from people not in your contacts. Nothing is delivered or saved.",
- "show_unknown_contact_banner": "Show Unknown Contact Banner",
- "show_unknown_contact_banner_description": "When enabled, a notice appears at the top of conversations with peers who are not in your contacts.",
- "warn_on_stranger_links": "Warn Before Opening Stranger Links",
- "warn_on_stranger_links_description": "Show a warning prompt before opening HTTP/HTTPS links sent by peers who are not in your contacts.",
- "banishment": "Banishment",
- "banishment_description": "Customize the visual effect shown for banished peers and nodes.",
- "banished_effect_enabled": "Enable Banishment Effect",
- "banished_effect_description": "Show a visual overlay on banished peers and nodes.",
- "banished_text_label": "Banishment Text",
- "banished_text_description": "Custom message to display on the overlay.",
- "banished_color_label": "Banishment Color",
- "banished_color_description": "The color used for the banishment effect.",
- "desktop_open_calls_in_separate_window": "Open Calls in 2nd Window",
- "desktop_open_calls_in_separate_window_description": "When a call is active, it will be shown in a separate pop-out window rather than inside the app.",
- "desktop_hardware_acceleration_enabled": "Hardware Acceleration",
- "desktop_hardware_acceleration_enabled_description": "Disable this if you experience flickering, black screens, or other graphical issues.",
- "translator": "Translator",
- "translator_enabled": "Enable Translator",
- "translator_description": "Enable translation features in conversations.",
+ "auto_sync_interval": "Automaattisen synkronoinnin väli",
+ "last_synced": "Viimeisin synkronointi {time} sitten.",
+ "last_synced_never": "Viimeisin synkronointi: ei koskaan.",
+ "propagation_stamp_cost": "Levityssolmun leiman hinta",
+ "propagation_stamp_description": "Vaadi levityssolmusi välittämiltä viesteiltä PoW-leima. Suurempi arvo vaatii enemmän työtä. Väli: 13-254. Oletus: 16. **Huomaa:** Arvon muuttaminen vaatii uudelleenkäynnistyksen.",
+ "language": "Kieli",
+ "select_language": "Valitse kieli.",
+ "tagline": "Reticulum-verkon yleisohjelmisto",
+ "open": "Avaa",
+ "identity": "Identiteetti",
+ "lxmf_address_hash": "LXMF-kohteen tiiviste",
+ "propagation_node_status": "Levityssolmun tila",
+ "last_sync": "Viimeisin synkronointi: {time} sitten",
+ "last_sync_never": "Viimeisin synkronointi: ei koskaan",
+ "syncing": "Synkronoidaan...",
+ "synced": "Synkronoitu",
+ "not_synced": "Ei synkronoitu",
+ "not_configured": "Ei asetettu",
+ "toggle_source": "Lähdekoodin näyttö",
+ "audio_calls": "Puhelin",
+ "calls": "Puhelut",
+ "status": "Tila",
+ "active_call": "Käynnissä oleva puhelu",
+ "incoming": "Saapuva",
+ "outgoing": "Lähtevä",
+ "call": "Puhelu",
+ "calls_plural": "Puhelut",
+ "hop": "hyppy",
+ "hops_plural": "hypyt",
+ "hung_up_waiting": "Katkaistu, odotetaan puhelua...",
+ "view_incoming_calls": "Näytä saapuvat puhelut",
+ "hangup_all_calls": "Katkaise kaikki puhelut",
+ "clear_history": "Tyhjää historia",
+ "no_active_calls": "Ei puheluja käynnissä",
+ "incoming_call": "Saapuva puhelu...",
+ "outgoing_call": "Lähtevä puhelu...",
+ "call_active": "Käytössä",
+ "call_ended": "Lopetettu",
+ "propagation_node": "Levityssolmu",
+ "sync_now": "Synkronoi nyt",
+ "setting_auto_saved": "Asetus {label} tallennettiin",
+ "backup_max_count": "Automaattisen varmuuskopion raja",
+ "message_font_size": "Viestin fonttikoko",
+ "message_icon_size": "Kuvakkeen koko",
+ "detailed_outbound_send_status": "Yksityiskohtainen lähetyksen tila",
+ "detailed_outbound_send_status_description": "Näytä yksityiskohtaiset tiedot kuten reititys ja tekniset selitteet lähettäessä. Pois kytkettynä näytetään yksinkertainen tarkiste.",
+ "outbound_transfer_progress_enabled": "Näytä siirron edistymisen palkki",
+ "outbound_transfer_progress_enabled_description": "Näytä siirron nopeus, hypyt ja kulunut aika palkissa lähtevien viestin alla.",
+ "message_timestamp_grouping": "Aikaleimojen ryhmittely",
+ "message_timestamp_grouping_description": "Päälle kytkettynä viestit ryhmitellään päivittäin ja aikaleimat yksinkertaistetaan. Pois kytkettynä tarkka aikaleima näytetään joka viestissä.",
+ "search_settings": "Hae asetuksista...",
+ "auto_resend": "Lähetä uudelleen automaattisesti",
+ "retry_attachments": "Uudelleenlähetä liitteet",
+ "auto_fallback": "Automaattinen varapolku",
+ "community_interfaces": "Yhteisön sovittimet",
+ "preferred_node": "Suosittu solmu",
+ "local_node": "Paikallinen solmu",
+ "auto_sync": "Automaattinen synkronointi",
+ "inbound_stamp_cost_label": "Saapuvien leiman hinta",
+ "propagation_stamp_cost_label": "Levityssolmun leiman hinta",
+ "page_archiver": "Sivujen arkistoija",
+ "smart_crawler": "Älykäs verkon ryömijä",
+ "authentication": "Todentaminen",
+ "stranger_protection": "Vierassuojaus",
+ "stranger_protection_description": "Valitse miten sovellus käsittelee vierailta tulevat viestit ja liitteet.",
+ "block_stranger_attachments": "Estä liitteet vierailta.",
+ "block_stranger_attachments_description": "Poista tiedostot, kuvat ja ääniliitteet vierailta automaattisesti. Tekstiviestit saapuvat silti.",
+ "block_all_from_strangers": "Estä kaikki vierailta.",
+ "block_all_from_strangers_description": "Estä kaikki viestit, liitteet ja puhelut vierailta. Mitään ei vastaanoteta eikä tallenneta.",
+ "show_unknown_contact_banner": "Näytä tuntemattoman yhteyshenkilön tunnus",
+ "show_unknown_contact_banner_description": "Päälle kytkettynä vieraiden kanssa käytävissä keskusteluissa näytetään huomautus.",
+ "warn_on_stranger_links": "Varoita ennen vierailta tulevien linkkien avaamista",
+ "warn_on_stranger_links_description": "Näytä varoitus ennen vierailta saapuneiden HTTP/HTTPS-linkkien avaamista.",
+ "banishment": "Karkotus",
+ "banishment_description": "Mukauta karkotettujen osallistujien ja solmujen visuaalista tehostetta.",
+ "banished_effect_enabled": "Näytä karkotustehoste",
+ "banished_effect_description": "Näytä visuaalinen tehoste karkotetuille osallistujille ja solmuille.",
+ "banished_text_label": "Karkotusteksti",
+ "banished_text_description": "Tehosteen mukautettu teksti",
+ "banished_color_label": "Karkotusväri",
+ "banished_color_description": "Tehosteen väri",
+ "desktop_open_calls_in_separate_window": "Avaa puhelut toisessa ikkunassa",
+ "desktop_open_calls_in_separate_window_description": "Puhelun ollessa käynnissä se näytetään erillisessä ikkunnassa.",
+ "desktop_hardware_acceleration_enabled": "Laitteistokiihdytys",
+ "desktop_hardware_acceleration_enabled_description": "Kytke pois, jos koet graafisia ongelmia kuten vilkkumista tai mustia ruutuja.",
+ "translator": "Kääntäjä",
+ "translator_enabled": "Kytke kääntäjä päälle",
+ "translator_description": "Kytke kääntäjä päälle keskusteluissa.",
"libretranslate_url": "LibreTranslate URL",
- "libretranslate_url_description": "The URL where LibreTranslate API is accessible.",
- "system": "System",
- "reticulum_stack": "Reticulum Stack",
- "reticulum_stack_description": "Manage the underlying Reticulum Network Stack.",
- "reload_rns": "Reload RNS",
- "reload_rns_description": "Deregister all destinations, stop the current RNS instance, and reload it. This is useful for applying configuration changes or restarting the mesh network stack without restarting the entire application.",
- "reloading_rns": "Reloading RNS...",
- "restart_rns": "Restart RNS",
- "reloaded_rns": "Reticulum reloaded successfully",
- "announce_interval": "Announce Interval",
- "stop_sync_confirm": "Are you sure you want to stop syncing?",
- "sync_error_generic": "Something went wrong. Try again later.",
- "sync_complete": "Sync complete. {count} messages received.",
- "sync_error": "Sync error: {status}",
- "propagation_sync_live": "Syncing: {status} ({progress}%)",
+ "libretranslate_url_description": "URL LibreTranslate API:lle.",
+ "system": "Järjestelmä",
+ "reticulum_stack": "Reticulum-pino",
+ "reticulum_stack_description": "Hallinnoi taustalla olevaa Reticulum-verkkopinoa.",
+ "reload_rns": "Lataa RNS uudelleen",
+ "reload_rns_description": "Irrota kaikki kohteet, pysäytä nykyinen RNS-instanssi ja lataa se uudelleen. Tämä on tarpeellista kokoonpanoa muuttaessa, ja se käynnistää mesh-verkon uudelleen ilman sovelluksen uudelleenkäynnistystä.",
+ "reloading_rns": "Ladataan RNS uudelleen...",
+ "restart_rns": "Käynnistä RNS uudelleen",
+ "reloaded_rns": "Reticulum ladattu uudelleen",
+ "announce_interval": "Kuulutusväli",
+ "stop_sync_confirm": "Haluatko varmasti lopettaa synkronoinnin?",
+ "sync_error_generic": "Jokin meni vikaan. Yritä uudelleen myöhemmin.",
+ "sync_complete": "Synkronointi valmis. {count} viestiä vastaanotettu.",
+ "sync_error": "Synkronointivirhe: {status}",
+ "propagation_sync_live": "Synkronointi: {status} ({progress}%)",
"propagation_sync_state": {
- "idle": "Idle",
- "path_requested": "Requesting path",
- "link_establishing": "Establishing link",
- "link_established": "Link established",
- "request_sent": "Request sent",
- "receiving": "Receiving messages",
- "response_received": "Processing response",
- "complete": "Complete",
- "no_path": "No path to node",
- "link_failed": "Link failed",
- "transfer_failed": "Transfer failed",
- "no_identity_received": "No identity received",
- "no_access": "Access denied",
- "failed": "Failed",
- "path_timeout": "Path timed out",
- "unknown": "Unknown state"
+ "idle": "Toimeton",
+ "path_requested": "Pyytää polkua",
+ "link_establishing": "Luo yhteyttä",
+ "link_established": "Yhteys luotu",
+ "request_sent": "Pyyntö lähetetty",
+ "receiving": "Vastaanottaa viestejä",
+ "response_received": "Käsittelee vastausta",
+ "complete": "Valmis",
+ "no_path": "Ei polkua solmuun",
+ "link_failed": "Yhteys epäonnistui",
+ "transfer_failed": "Siirto epäonnistui",
+ "no_identity_received": "Identiteettiä ei vastaanotettu",
+ "no_access": "Pääsy evätty",
+ "failed": "Epäonnistunut",
+ "path_timeout": "Polun hakeminen aikakatkaistiin",
+ "unknown": "Tuntematon tila"
},
- "switching_identity": "Switching Identity...",
- "loading_identity": "Loading your identity",
- "loading_overlay_kicker": "One moment",
- "loading_overlay_title": "Switching profile",
- "loading_overlay_subtitle": "Loading your chats and settings. This usually takes a few seconds.",
- "emergency_mode_active": "Emergency Mode Active - Using in-memory database and restricted services.",
- "backend_disconnected": "Disconnected from backend",
- "backend_process_stopped": "Reticulum backend stopped",
- "backend_reconnected": "Reconnected to backend",
- "restart_backend": "Restart backend",
- "restart_backend_started": "Restarting backend…",
- "restart_backend_failed": "Could not restart backend",
- "view_backend_logs": "View crash log",
- "view_backend_logs_failed": "No crash log available",
- "blackhole_integration_enabled": "Blackhole Integration",
- "blackhole_integration_description": "Automatically blackhole identities at the Reticulum transport layer when banishing users in MeshChatX.",
- "announce_limits": "Announce Limits",
- "announce_limits_description": "Limit how many announcements are kept in the database and how many are loaded at once. Clear a field and save to restore defaults.",
- "announce_store_heading": "Store incoming announces",
- "announce_store_description": "When off, received announces of this type are not saved. This only affects storage and does not stop the network or your own announces. Your local NomadNet node will still be listed.",
+ "switching_identity": "Vaihdetaan identiteettiä...",
+ "loading_identity": "Ladataan identiteettiä",
+ "loading_overlay_kicker": "Pieni hetki",
+ "loading_overlay_title": "Vaihdetaan profiilia",
+ "loading_overlay_subtitle": "Ladataan viestejä ja asetuksia. Tässä menee yleensä muutama sekunti.",
+ "emergency_mode_active": "Hätätila käynnissä - Käytetään muistinsisäistä tietokantaa ja rajoitettuja palveluja.",
+ "backend_disconnected": "Irrotettu taustapalvelusta",
+ "backend_process_stopped": "Reticulum-taustapalvelu pysäytetty",
+ "backend_reconnected": "Liitetty uudelleen taustapalveluun",
+ "restart_backend": "Käynnistä taustapalvelu uudelleen",
+ "restart_backend_started": "Käynnistetään palvelua...",
+ "restart_backend_failed": "Taustapalvelun Uudelleenkäynnistys epäonnistui",
+ "view_backend_logs": "Näytä kaatumisloki",
+ "view_backend_logs_failed": "Kaatumisloki ei ole saatavilla",
+ "blackhole_integration_enabled": "Musta aukko",
+ "blackhole_integration_description": "Merkitse MeshChatX:ssä karkotetut identiteetit automaattisesti Reticulumin mustaan aukkoon.",
+ "announce_limits": "Kuulutusrajat",
+ "announce_limits_description": "Rajoita tietokannassa säilöttävien kuulutuksien lukumäärää ja latausta. Tyhjennä kenttä ja tallenna palauttaaksesi oletukset.",
+ "announce_store_heading": "Säilytä saapuvat kuulutukset",
+ "announce_store_description": "Pois kytkettynä tämän tyyppisiä kuulutuksia ei tallenneta. Tämä vaikuttaa vain muiden kuulutusten säilömiseen eikä estä verkkoa toimimasta eikä sinua kuuluttamasta. Paikallinen NomadNet-solmusi säilötään joka tapauksessa.",
"announce_store_lxmf": "LXMF (lxmf.delivery)",
- "announce_store_lxst": "LXST telephony (lxst.telephony)",
- "announce_store_nomad": "NomadNet nodes (nomadnetwork.node)",
- "announce_store_prop": "Propagation nodes (lxmf.propagation)",
- "announce_max_stored_heading": "Max stored per aspect (database)",
- "announce_fetch_limit_heading": "Default page size (API)",
- "announce_search_max_fetch": "Max announces for search",
- "announce_search_max_fetch_hint": "Maximum rows read from the database when you use text search on announces (per request).",
- "discovered_interfaces_max_return": "Discovered interfaces cap",
- "discovered_interfaces_max_return_hint": "Maximum discovered and active interface entries returned to the UI.",
+ "announce_store_lxst": "LXST puhelut (lxst.telephony)",
+ "announce_store_nomad": "NomadNet-solmut (nomadnetwork.node)",
+ "announce_store_prop": "Levityssolmut (lxmf.propagation)",
+ "announce_max_stored_heading": "Säilö korkeintaan, tyyppikohtainen (tietokanta)",
+ "announce_fetch_limit_heading": "Sivukoon oletus (API)",
+ "announce_search_max_fetch": "Haettavien kuulutuksien enimmäismäärä",
+ "announce_search_max_fetch_hint": "Tietokannasta luettavien kuulutuksien enimmäismäärä hakua kohden, kun haet tekstiä kuulutusnäkymässä.",
+ "discovered_interfaces_max_return": "Havaittujen sovittimien katto",
+ "discovered_interfaces_max_return_hint": "Käytettäväksi liitettävien verkossa havaittujen sovittimien enimmäismäärä.",
"announce_limit_lxmf": "LXMF",
"announce_limit_nomadnet": "NomadNet",
- "announce_limit_prop": "Prop Nodes",
- "csp_settings": "Content Security Policy (CSP)",
- "csp_description": "Manually add allowed domains for various resources. This is useful for custom map servers, bots, or external integrations.",
- "csp_extra_connect_src": "Extra Connect Sources",
- "csp_extra_connect_src_description": "Additional sources for fetch/websocket connections (e.g. https://api.example.com).",
- "csp_extra_img_src": "Extra Image Sources",
- "csp_extra_img_src_description": "Additional sources for images and tiles.",
- "csp_extra_frame_src": "Extra Frame Sources",
- "csp_extra_frame_src_description": "Additional sources for iframes.",
- "csp_extra_script_src": "Extra Script Sources",
- "csp_extra_script_src_description": "Additional sources for scripts (advanced use only).",
- "csp_extra_style_src": "Extra Style Sources",
- "csp_extra_style_src_description": "Additional sources for stylesheets.",
- "location": "Location",
- "location_source": "Location Source",
- "location_source_disabled": "Disabled",
+ "announce_limit_prop": "Levityssolmut",
+ "csp_settings": "Sisällön turvallisuuskäytänteet (CSP)",
+ "csp_description": "Lisää käsin sallittuja verkkotunnuksia eri lähteille. Tätä voi käyttää karttapalveluille, boteille tai ulkoisille liitännäisille.",
+ "csp_extra_connect_src": "Ylimääräiset yhteyslähteet",
+ "csp_extra_connect_src_description": "Lisälähteet nouto-/websocket-yhteyksille (e.g. https://api.example.com).",
+ "csp_extra_img_src": "Lisälähteet kuville",
+ "csp_extra_img_src_description": "Kuvien ja karttalaattojen lisälähteet.",
+ "csp_extra_frame_src": "Iframe-lisälähteet",
+ "csp_extra_frame_src_description": "Lisälähteet iframeille.",
+ "csp_extra_script_src": "Lisälähteet skripteille",
+ "csp_extra_script_src_description": "Skriptien lisälähteet (edistynyt).",
+ "csp_extra_style_src": "Lisälähteet tyyleille",
+ "csp_extra_style_src_description": "Tyylien lisälähteet.",
+ "location": "Sijainti",
+ "location_source": "Sijainnin lähde",
+ "location_source_disabled": "Poissa käytöstä",
"location_source_disabled_desc": "Location sharing is turned off. Choose automatic or manual to share your coordinates.",
- "location_source_browser": "Automatic (Browser)",
- "location_source_manual": "Manual",
- "location_source_browser_desc": "Uses your browser's geolocation API. Note: In the desktop app, this may use Google services.",
- "location_source_manual_desc": "Use manually entered coordinates for maximum privacy.",
- "location_manual_lat": "Latitude",
- "location_manual_lon": "Longitude",
- "location_manual_alt": "Altitude (m)",
- "telemetry_enabled": "Telemetry Enabled",
- "telemetry_description": "Allow MeshChatX to send and receive telemetry data, such as responding to location requests from trusted peers.",
- "telemetry_trusted_peers": "Trusted Telemetry Peers",
- "telemetry_no_trusted_peers": "No trusted peers configured. Trust peers from the chat menu to allow them to request your location.",
- "telemetry_revoke_trust": "Revoke Trust",
- "telemetry_trust_revoked": "Revoked telemetry trust for {name}",
- "telemetry_trust_granted_alert": "Peer is now trusted for telemetry.",
- "telemetry_trust_revoked_alert": "Telemetry trust revoked.",
- "telemetry_trust_failed": "Failed to update telemetry trust.",
- "telemetry_trust_revoke": "Revoke Telemetry Trust",
- "telemetry_trust_grant": "Trust for Telemetry",
- "location_manage_desc": "Manage how your location is shared."
+ "location_source_browser": "Automaattinen (selain)",
+ "location_source_manual": "Käsin",
+ "location_source_browser_desc": "Käyttää verkkoselaimen sijaintipalvelua. Huomaa: työpöytäsovelluksessa tämä voi käyttää Google-palveluja.",
+ "location_source_manual_desc": "Syötä koordinaatit käsin yksityisyyden parantamiseksi.",
+ "location_manual_lat": "Leveys",
+ "location_manual_lon": "Pituus",
+ "location_manual_alt": "Korkeus (m)",
+ "telemetry_enabled": "Käytönseuranta kytketty",
+ "telemetry_description": "Salli MeshChatX:n välittää käyttötietoja, esimerkiksi luotettujen verkon osallistujien sijaintipyyntöihin vastaamiseen.",
+ "telemetry_trusted_peers": "Luotetut osallistujat käyttötietojen välittämiseksi",
+ "telemetry_no_trusted_peers": "Ei luotettuja osallistujia. Luota yhteyshenkilöihin keskusteluvalikossa antaaksesi luvan sijaintipyyntöihin.",
+ "telemetry_revoke_trust": "Poista luotto",
+ "telemetry_trust_revoked": "Poista henkilön {name} käyttötietoluotto",
+ "telemetry_trust_granted_alert": "Osallistujaan luotetaan nyt käyttötietojen jakamiseksi.",
+ "telemetry_trust_revoked_alert": "Käyttötietojen jako estetty.",
+ "telemetry_trust_failed": "Käyttötietojen luottamuksen päivitys epäonnistui.",
+ "telemetry_trust_revoke": "Poista käyttötietojen luottamus",
+ "telemetry_trust_grant": "Luota käyttötietojen välitystä varten",
+ "location_manage_desc": "Hallinnoi sijainnin jakamisen asetuksia."
},
"common": {
- "open": "Open",
- "close": "Close",
- "cancel": "Cancel",
- "save": "Save",
- "block": "Banish",
- "delete": "Delete",
- "edit": "Edit",
- "add": "Add",
- "sync": "Sync",
- "restart_app": "Restart App",
- "reveal": "Reveal",
- "refresh": "Refresh",
- "copy": "Copy",
- "copy_to_clipboard": "Copy to clipboard",
- "vacuum": "Vacuum",
- "auto_recover": "Auto Recover",
- "shutdown": "Shutdown",
- "acknowledge_reset": "Acknowledge & Reset",
- "continue": "Continue",
- "confirm": "Confirm",
- "delete_confirm": "Are you sure you want to delete this? This cannot be undone.",
- "search": "Search tools...",
- "no_results": "No tools found",
- "error": "Error",
- "success": "Success",
- "warning": "Warning",
- "info": "Info",
- "copied": "Copied to clipboard",
- "failed_to_copy": "Failed to copy to clipboard",
- "save_failed": "Failed to save configuration!",
- "invalid_address": "Invalid Address",
- "loading": "Loading...",
+ "open": "Avaa",
+ "close": "Sulje",
+ "cancel": "Peru",
+ "save": "Tallenna",
+ "block": "Karkota",
+ "delete": "Poista",
+ "edit": "Muokkaa",
+ "add": "Lisää",
+ "sync": "Synkronoi",
+ "restart_app": "Käynnistä sovellus uudelleen",
+ "reveal": "Paljasta",
+ "refresh": "Virkistä",
+ "copy": "Kopioi",
+ "copy_to_clipboard": "Kopioi leikepöydälle",
+ "vacuum": "Ime",
+ "auto_recover": "Palaudu automaattisesti",
+ "shutdown": "Sammuta",
+ "acknowledge_reset": "Hyväksy ja nollaa",
+ "continue": "Jatka",
+ "confirm": "Hyväksy",
+ "delete_confirm": "Oletko varma, että haluat poistaa tämän? Toimintoa ei voi kumota.",
+ "search": "Hae työkaluista...",
+ "no_results": "Työkaluja ei löydy",
+ "error": "Virhe",
+ "success": "Onnistuminen",
+ "warning": "Varoitus",
+ "info": "Lisätiedot",
+ "copied": "Kopioitu leikepöydälle",
+ "failed_to_copy": "Leikepöydälle kopiointi epäonnistui",
+ "save_failed": "Kokoonpanon tallennus epäonnistui!",
+ "invalid_address": "Kelvoton kohde",
+ "loading": "Ladataan...",
"ok": "OK",
- "clear": "Clear"
+ "clear": "Tyhjää"
},
"stickers": {
- "settings_title": "Stickers",
- "settings_description": "Your saved images for this identity. Use them in messages or save images from chats. You can also export or import a backup.",
- "export": "Export stickers",
- "import": "Import stickers",
- "export_done": "Stickers exported",
- "replace_duplicates": "Replace duplicate images when importing",
- "count": "{count} saved sticker(s)",
- "open_picker": "Stickers",
- "picker_tooltip": "Emoji, stickers, and GIFs",
- "tab_emojis": "Emojis",
- "tab_stickers": "Stickers",
- "empty_library": "No stickers yet.",
- "drop_or_click_hint": "Drop images here or click to browse (PNG, JPEG, GIF, WebP, BMP, TGS, WebM, max 512 KB each).",
- "add_more_hint": "Drop or click to add more stickers.",
- "file_too_large": "Each sticker must fit within its format limit (TGS 64 KB, WebM 256 KB, image 512 KB).",
- "unsupported_type": "Use PNG, JPEG, GIF, WebP, BMP, TGS, or WebM.",
- "uploaded_count": "Added {count} sticker(s).",
- "save_to_library": "Save image to stickers",
- "saved": "Sticker saved",
- "duplicate": "Already in your library",
- "save_failed": "Could not save sticker",
- "import_success": "Imported {imported}, skipped {skipped_duplicates} duplicates, invalid {skipped_invalid}",
- "import_failed": "Failed to import stickers",
- "all_stickers": "All stickers",
- "unpacked": "Unpacked",
- "open_editor": "Open sticker editor",
- "upload_short": "Upload",
- "format_static": "Static",
- "format_animated": "Animated",
+ "settings_title": "Tarrat",
+ "settings_description": "Tällä identiteetillä tallennetut kuvat. Käytä niitä viesteissä tai tallenna kuvia keskusteluista. Voit myös viedä tai tuoda varmuuskopion.",
+ "export": "Vie tarrat",
+ "import": "Tuo tarrat",
+ "export_done": "Tarrat viety",
+ "replace_duplicates": "Korvaa kuvien kaksoiskappaleet tuotaessa",
+ "count": "{count} tallennettua tarraa",
+ "open_picker": "Tarrat",
+ "picker_tooltip": "Emojit, tarrat, ja GIFit",
+ "tab_emojis": "Emojit",
+ "tab_stickers": "Tarrat",
+ "empty_library": "Ei vielä tarroja.",
+ "drop_or_click_hint": "Pudota kuvia tähän tai napauta selataksesi (PNG, JPEG, GIF, WebP, BMP, TGS, WebM, korkeintaan 512 KB kuvaa kohden).",
+ "add_more_hint": "Pudota tai klikkaa lisätäksesi tarroja.",
+ "file_too_large": "Jokaisen tarran on mahduttava muotoaan vastaavaan rajoitukseen (TGS 64 KB, WebM 256 KB, kuva 512 KB).",
+ "unsupported_type": "Käytä PNG, JPEG, GIF, WebP, BMP, TGS, tai WebM.",
+ "uploaded_count": "Lisätty {count} tarra(a).",
+ "save_to_library": "Tallenna kuva tarroihin",
+ "saved": "Tarra tallennettu",
+ "duplicate": "Kuva on jo kirjastossa",
+ "save_failed": "Tarran tallennus epäonnistui",
+ "import_success": "Tuotiin {imported}, ohitettiin {skipped_duplicates} kaksoiskappaletta, kelvottomia {skipped_invalid}",
+ "import_failed": "Tarrojen tuonti epäonnistui",
+ "all_stickers": "Kaikki tarrat",
+ "unpacked": "Purettu",
+ "open_editor": "Avaa tarramuokkain",
+ "upload_short": "Lataa",
+ "format_static": "Staattinen",
+ "format_animated": "Animoitu",
"format_video": "Video",
- "format_legacy": "Legacy",
+ "format_legacy": "Vanhanaikainen",
"errors": {
- "file_too_large_static": "Static stickers must be 512 KB or smaller.",
- "file_too_large_animated": "Animated TGS stickers must be 64 KB or smaller.",
- "file_too_large_video": "Video WEBM stickers must be 256 KB or smaller.",
- "invalid_dimensions": "Stickers must be at most 512x512 pixels with one side exactly 512.",
- "invalid_duration": "Animated and video stickers must be 3 seconds or shorter.",
- "invalid_fps": "Animated stickers must be 30-60 FPS, video stickers up to 30 FPS.",
- "invalid_codec": "Video stickers must use the VP9 codec.",
- "invalid_audio": "Video stickers must not contain an audio stream.",
- "invalid_tgs": "Could not read TGS animation.",
- "invalid_webm": "Could not read WebM video."
+ "file_too_large_static": "Staattisten tarrojen enimmäiskoko on 512 KB.",
+ "file_too_large_animated": "Animoitujen TGS-tarrojen enimmäiskoko on 64 KB.",
+ "file_too_large_video": "Video WEBM -tarrojen enimmäiskoko on 256 KB.",
+ "invalid_dimensions": "Tarrojen on oltava korkeintaan 512x512 pikseliä, ja yhden sivun on oltava tarkalleen 512 pikseliä.",
+ "invalid_duration": "Animoitujen ja videotarrojen enimmäispituus on kolme sekuntia.",
+ "invalid_fps": "Animoitujen tarrojen on oltava 30-60 FPS, videotarrojen korkeintaan 30 FPS.",
+ "invalid_codec": "Videotarrojen on käytettävä VP9-koodekkia.",
+ "invalid_audio": "Videotarroissa ei saa olla ääniraitaa.",
+ "invalid_tgs": "TGS-animaation lukeminen epäonnistui.",
+ "invalid_webm": "WebM-videon lukeminen epäonnistui."
},
"packs": {
- "title": "Sticker packs",
- "description": "Group stickers into packs you can share or import.",
- "create": "New pack",
- "create_pack": "Create sticker pack",
- "title_label": "Title",
- "title_placeholder": "My pack",
- "short_name_label": "Short name",
- "short_name_placeholder": "e.g. cats",
- "description_label": "Description",
- "type_label": "Type",
- "type_static": "Static",
- "type_animated": "Animated",
+ "title": "Tarra-arkit",
+ "description": "Ryhmitä tarrat arkkeihin jakamista tai tuontia varten.",
+ "create": "Uusi arkki",
+ "create_pack": "Luo tarra-arkki",
+ "title_label": "Nimike",
+ "title_placeholder": "Minun arkkini",
+ "short_name_label": "Lyhyt nimi",
+ "short_name_placeholder": "esim. kissat",
+ "description_label": "Kuvaus",
+ "type_label": "Tyyppi",
+ "type_static": "Staattinen",
+ "type_animated": "Animoitu",
"type_video": "Video",
- "type_mixed": "Mixed",
- "save": "Save",
- "cancel": "Cancel",
- "open_editor": "Add stickers",
- "export": "Export pack",
- "import": "Import pack",
- "delete": "Delete pack",
- "delete_confirm": "Delete this pack?",
- "delete_with_stickers": "Also delete stickers in this pack",
- "deleted": "Pack deleted",
- "created": "Pack created",
- "exported": "Pack exported",
- "installed": "Pack installed: imported {imported}, skipped {skipped}",
- "install_failed": "Failed to install pack",
- "empty": "No packs yet.",
- "count_one": "{count} sticker",
- "count_other": "{count} stickers",
- "stickers_in_pack": "Stickers in {title}",
- "no_stickers": "No stickers in this pack yet."
+ "type_mixed": "Sekoitus",
+ "save": "Tallenna",
+ "cancel": "Peru",
+ "open_editor": "Lisää tarroja",
+ "export": "Vie arkki",
+ "import": "Tuo arkki",
+ "delete": "Tuo arkki",
+ "delete_confirm": "Poista tämä arkki?",
+ "delete_with_stickers": "Poista myös tämän arkin tarrat?",
+ "deleted": "Arkki poistettu",
+ "created": "Arkki luotu",
+ "exported": "Arkki viety",
+ "installed": "Arkki asennettu: tuotu {imported}, ohitettu {skipped}",
+ "install_failed": "Arkin asennus epäonnistui",
+ "empty": "Ei arkkeja vielä.",
+ "count_one": "{count} tarra",
+ "count_other": "{count} tarraa",
+ "stickers_in_pack": "Tarrat arkissa {title}",
+ "no_stickers": "Tässä arkissa ei vielä ole tarroja."
},
"editor": {
- "title": "Sticker editor",
- "open": "Open editor",
- "select_image": "Select image",
- "drop_image": "Drop an image, or click to browse",
- "reset": "Reset",
- "remove_background": "Remove background",
- "removing_background": "Removing background...",
- "white_stroke": "White stroke",
- "shadow": "Drop shadow",
- "stroke_size": "Stroke size",
- "scale": "Scale",
- "rotate": "Rotate",
- "offset_x": "Offset X",
- "offset_y": "Offset Y",
- "text_overlay": "Text overlay",
- "text_placeholder": "Add text...",
- "text_color": "Text color",
- "text_size": "Text size",
- "format": "Export format",
+ "title": "Tarramuokkain",
+ "open": "Avaa muokkain",
+ "select_image": "Valitse kuva",
+ "drop_image": "Pudota kuva tai klikkaa selataksesi",
+ "reset": "Palauta",
+ "remove_background": "Poista tausta",
+ "removing_background": "Taustaa poistetaan...",
+ "white_stroke": "Valkoinen piirto",
+ "shadow": "Varjo",
+ "stroke_size": "Piirron leveys",
+ "scale": "Skaalaa",
+ "rotate": "Kierrä",
+ "offset_x": "Siirrä X",
+ "offset_y": "Siirrä Y",
+ "text_overlay": "Tekstikehys",
+ "text_placeholder": "Lisää teksti...",
+ "text_color": "Tekstin väri",
+ "text_size": "Tekstin koko",
+ "format": "Vientimuoto",
"format_png": "PNG",
"format_webp": "WebP",
- "quality": "Quality",
+ "quality": "Laatu",
"emoji": "Emoji",
- "emoji_placeholder": "Optional",
- "pack": "Pack",
- "no_pack": "No pack",
- "save": "Save sticker",
- "saved": "Sticker saved",
- "save_failed": "Could not save sticker",
- "current_size": "Current size: {size}",
- "size_too_large": "Result is larger than 512 KB. Try lowering quality or using PNG with simpler shapes."
+ "emoji_placeholder": "Valinnainen",
+ "pack": "Arkki",
+ "no_pack": "Ei arkkia",
+ "save": "Tallenna tarra",
+ "saved": "Tarra tallennettu",
+ "save_failed": "Tarran tallennus epäonnistui",
+ "current_size": "Nykyinen koko: {size}",
+ "size_too_large": "Tuotos on suurempi kuin 512 KB. Kokeile heikentää laatua tai käyttää PNG:tä yksinkertaisemmilla muodoilla."
}
},
"sticker_editor": {
- "title": "Sticker editor",
- "create_button": "Create sticker",
- "processing": "Processing...",
- "canvas_hint": "Preview is scaled to fit. Export uses a 512×512 canvas.",
- "section_source": "Source",
- "choose_image": "Choose image",
- "section_transform": "Transform",
- "scale": "Scale",
- "rotation": "Rotation",
- "flip_h": "Flip horizontal",
- "flip_v": "Flip vertical",
- "reset_transform": "Reset transform",
- "section_effects": "Effects",
- "bg_removed": "Background removed",
- "remove_background": "Remove background",
- "white_stroke": "White stroke",
- "shadow": "Drop shadow",
- "section_overlay": "Text overlay",
- "overlay_placeholder": "Add text...",
- "font_size": "Font size",
- "overlay_y": "Vertical position",
- "text_color": "Text color",
- "stroke_color": "Stroke color",
- "section_meta": "Details",
- "name_placeholder": "Sticker name",
- "emoji_placeholder": "Emoji (optional)",
- "format": "Export format",
- "quality": "Quality",
- "size_label": "Size: {size} (max {limit})",
- "cancel": "Cancel",
- "save": "Save sticker",
- "image_load_failed": "Could not load image",
- "removing_background": "Removing background...",
- "bg_removal_failed": "Background removal failed",
- "too_large": "Exported file is larger than 512 KB",
- "saving": "Saving...",
- "saved": "Sticker saved",
- "save_failed": "Could not save sticker"
+ "title": "Tarramuokkain",
+ "create_button": "Luo tarra",
+ "processing": "Käsitellään...",
+ "canvas_hint": "Esikatselu skaalataan kokoon. Vienti käyttää 512×512-kanvaasia.",
+ "section_source": "Lähde",
+ "choose_image": "Valitse kuva",
+ "section_transform": "Muunna",
+ "scale": "Skaalaa",
+ "rotation": "Kierrä",
+ "flip_h": "Käännä vaakasuunnassa",
+ "flip_v": "Käännä pystysuunnassa",
+ "reset_transform": "Palauta muunnos",
+ "section_effects": "Tehosteet",
+ "bg_removed": "Tausta poistettu",
+ "remove_background": "Poista tausta",
+ "white_stroke": "Valkoinen piirto",
+ "shadow": "Varjo",
+ "section_overlay": "Tekstikehys",
+ "overlay_placeholder": "Lisää teksti...",
+ "font_size": "Fonttikoko",
+ "overlay_y": "Pystysuunnan sijainti",
+ "text_color": "Tekstin väri",
+ "stroke_color": "Piirron väri",
+ "section_meta": "Yksityiskohdat",
+ "name_placeholder": "Tarran nimi",
+ "emoji_placeholder": "Emoji (valinnainen)",
+ "format": "Vientimuoto",
+ "quality": "Laatu",
+ "size_label": "Koko: {size} (korkeintaan {limit})",
+ "cancel": "Peru",
+ "save": "Tallenna tarra",
+ "image_load_failed": "Kuvan lataaminen epäonnistui",
+ "removing_background": "Taustaa poistetaan...",
+ "bg_removal_failed": "Taustan poisto epäonnistui",
+ "too_large": "Viety tiedosto on suurempi kuin 512 KB",
+ "saving": "Tallennetaan...",
+ "saved": "Tarra tallennettu",
+ "save_failed": "Tarran tallennus epäonnistui"
},
"sticker_packs": {
- "all": "All",
- "section_title": "Sticker packs",
- "section_description": "Group stickers into packs you can share or import.",
- "create": "New pack",
- "open_editor": "Add stickers",
- "install_from_file": "Install from file",
- "empty": "No packs yet.",
- "count_label": "{count} stickers",
- "add_sticker": "Add sticker",
- "export": "Export pack",
- "delete": "Delete pack",
- "empty_pack": "No stickers in this pack yet.",
- "create_title": "Create sticker pack",
- "field_title": "Title",
- "field_short_name": "Short name",
- "field_description": "Description",
- "type_static": "Static",
- "type_animated": "Animated",
+ "all": "Kaikki",
+ "section_title": "Tarra-arkit",
+ "section_description": "Ryhmitä tarrat arkkeihin jakamista tai tuontia varten.",
+ "create": "Uusi arkki",
+ "open_editor": "Lisää tarroja",
+ "install_from_file": "Asenna tiedostosta",
+ "empty": "Ei arkkeja vielä.",
+ "count_label": "{count} tarraa",
+ "add_sticker": "Lisää tarra",
+ "export": "Vie arkki",
+ "delete": "Tuo arkki",
+ "empty_pack": "Tässä arkissa ei vielä ole tarroja.",
+ "create_title": "Luo tarra-arkki",
+ "field_title": "Nimike",
+ "field_short_name": "Lyhyt nimi",
+ "field_description": "Kuvaus",
+ "type_static": "Staattinen",
+ "type_animated": "Animoitu",
"type_video": "Video",
- "type_mixed": "Mixed",
- "strict_label": "Enforce pack type (reject mismatched uploads)",
- "created": "Pack created",
- "create_failed": "Could not create pack",
- "exported": "Pack exported",
- "export_failed": "Export failed",
- "confirm_delete": "Delete pack \"{title}\"?",
- "deleted": "Pack deleted",
- "delete_failed": "Could not delete pack",
- "installed": "Pack installed ({imported} imported)",
- "install_failed": "Could not install pack"
+ "type_mixed": "Sekoitus",
+ "strict_label": "Pakota arkin tyyppi (hylkää yhteensopimattomat lataukset)",
+ "created": "Arkki luotu",
+ "create_failed": "Arkin luonti epäonnistui",
+ "exported": "Arkki viety",
+ "export_failed": "Vienti epäonnistui",
+ "confirm_delete": "Poista arkki \"{title}\"?",
+ "deleted": "Arkki poistettu",
+ "delete_failed": "Arkin poisto epäonnistui",
+ "installed": "Arkki tuotu ({imported} tuotu)",
+ "install_failed": "Arkin tuonti epäonnistui"
},
"gifs": {
- "settings_title": "GIFs",
- "settings_description": "Your personal GIF library. Upload GIF and animated WebP files to reuse them in chats. Your most-used GIFs are shown first.",
- "export": "Export GIFs",
- "import": "Import GIFs",
- "export_done": "GIFs exported",
- "replace_duplicates": "Replace duplicate GIFs when importing",
- "count": "{count} saved GIF(s)",
- "tab_gifs": "GIFs",
- "empty_library": "No GIFs yet. Upload a GIF or save one from a chat.",
- "drop_or_click_hint": "Drop GIFs here or click to browse (GIF or WebP, max 5 MB each).",
- "add_more_hint": "Drop or click to add more GIFs.",
- "file_too_large": "Each GIF must be 5 MB or smaller.",
- "unsupported_type": "Use GIF or WebP files only.",
- "uploaded_count": "Added {count} GIF(s).",
- "save_to_library": "Save image to GIFs",
- "saved": "GIF saved",
- "duplicate": "Already in your GIF library",
- "save_failed": "Could not save GIF",
- "import_success": "Imported {imported}, skipped {skipped_duplicates} duplicates, invalid {skipped_invalid}",
- "import_failed": "Failed to import GIFs"
+ "settings_title": "GIFit",
+ "settings_description": "Oma GIF-kirjastosi. Lataa GIFejä ja animoituja WebP-tiedostoja käyttääksesi niitä keskusteluissa. Käytetyimmät GIFit näytetään ensin.",
+ "export": "Vie GIFejä",
+ "import": "Tuo GIFejä",
+ "export_done": "GIFit viety",
+ "replace_duplicates": "Korvaa GIFien kaksoiskappaleet tuodessa.",
+ "count": "{count} GIFiä tallennettu",
+ "tab_gifs": "GIFit",
+ "empty_library": "Ei GIFejä vielä. Lataa GIF tai tallenna keskustelusta.",
+ "drop_or_click_hint": "Pudota GIFejä tähän tai klikkaa selataksesi (GIF tai WebP, korkeintaan 5 MB tiedostoa kohden).",
+ "add_more_hint": "Pudota tai klikkaa lisätäksesi GIFejä.",
+ "file_too_large": "Yksittäisen GIFin enimmäiskoko on 5 MB.",
+ "unsupported_type": "Käytä vain GIF- tai WebP-tiedostoja.",
+ "uploaded_count": "Lisättiin {count} GIFiä.",
+ "save_to_library": "Tallenna kuva GIFiksi",
+ "saved": "GIF tallennettu",
+ "duplicate": "Olet jo GIF-kirjastossasi",
+ "save_failed": "GIFin tallennus epäonnistui",
+ "import_success": "Tuotiin {imported}, ohitettiin {skipped_duplicates} kaksoiskappaletta, kelvottomia {skipped_invalid}",
+ "import_failed": "GIFien tuonti epäonnistui"
},
"maintenance": {
- "title": "Maintenance & Data",
- "description": "Manage your local data, clear caches, and backup conversations.",
- "clear_messages": "Clear All Messages",
- "clear_messages_desc": "Permanently delete all sent and received messages.",
- "clear_announces": "Clear All Announces",
- "clear_announces_desc": "Remove all discovered peers and nodes from your cache.",
- "clear_nomadnet_favs": "Clear NomadNetwork Favorites",
- "clear_nomadnet_favs_desc": "Remove all saved NomadNetwork nodes from your favorites.",
- "clear_lxmf_icons": "Clear LXMF Icons",
- "clear_lxmf_icons_desc": "Remove cached LXMF user icons from your device.",
- "clear_stickers": "Clear All Stickers",
- "clear_stickers_desc": "Remove every saved sticker image for this identity.",
- "stickers_cleared": "Stickers cleared",
- "clear_gifs": "Clear All GIFs",
- "clear_gifs_desc": "Remove every saved GIF for this identity.",
- "gifs_cleared": "GIFs cleared",
- "clear_archives": "Clear Page Archives",
- "clear_archives_desc": "Delete all cached NomadNetwork pages.",
- "clear_reticulum_docs": "Clear Reticulum Docs",
- "clear_reticulum_docs_desc": "Removes all downloaded Reticulum documentation and versions.",
- "clear_path_table": "Clear Path Table",
- "clear_path_table_desc": "Drop all cached Reticulum transport paths. Routes will be re-discovered as needed.",
- "path_table_cleared": "Path table cleared",
- "export_messages": "Export Messages",
- "export_messages_desc": "Download all conversations as a JSON file.",
- "import_messages": "Import Messages",
- "import_messages_desc": "Restore conversations from a JSON file.",
- "clear_confirm": "Are you sure? This action cannot be undone.",
- "messages_cleared": "Messages cleared successfully",
- "announces_cleared": "Announces cleared successfully",
- "favourites_cleared": "Favorites cleared successfully",
- "lxmf_icons_cleared": "LXMF icons cleared successfully",
- "archives_cleared": "Archives cleared successfully",
- "docs_cleared": "Reticulum documentation cleared successfully",
- "import_success": "Successfully imported {count} messages",
- "import_failed": "Failed to import messages",
- "export_nomadnet_favourites": "Export NomadNet favourites",
- "import_nomadnet_favourites": "Import NomadNet favourites",
- "nomadnet_favourites_exported": "NomadNet favourites layout exported",
- "nomadnet_favourites_export_failed": "Could not export NomadNet favourites",
- "nomadnet_favourites_imported": "NomadNet favourites layout imported",
- "nomadnet_favourites_import_failed": "Could not import NomadNet favourites file"
+ "title": "Ylläpito ja tiedot",
+ "description": "Hallinnoi paikallista dataa, pyyhi välimuisti ja varmuuskopioi keskustelut.",
+ "clear_messages": "Poista kaikki viestit",
+ "clear_messages_desc": "Poista pysyvästi kaikki lähetetyt ja vastaanotetut viestit.",
+ "clear_announces": "Poista kuulutukset",
+ "clear_announces_desc": "Poista kaikki havaitut osallistujat ja solmut välimuistista.",
+ "clear_nomadnet_favs": "Tyhjää NomadNet-suosikit",
+ "clear_nomadnet_favs_desc": "Poista kaikki tallennetut NomadNet-solmut suosikkilistauksestasi.",
+ "clear_lxmf_icons": "Poista LXMF-kuvakkeet",
+ "clear_lxmf_icons_desc": "Poista laitteen välimuistissa olevat LXMF-osallistujien kuvakkeet.",
+ "clear_stickers": "Poista kaikki tarrat",
+ "clear_stickers_desc": "Poista tämän identiteetin tallennetut tarrat.",
+ "stickers_cleared": "Tarrat poistettu",
+ "clear_gifs": "Poista kaikki GIFit",
+ "clear_gifs_desc": "Poista tämän identiteetin tallennetut GIFit.",
+ "gifs_cleared": "GIFit poistettu",
+ "clear_archives": "Tyhjää sivuarkisto",
+ "clear_archives_desc": "Poista kaikki välimuistissa olevat NomadNet-sivut.",
+ "clear_reticulum_docs": "Poista Reticulumin dokumentaatio",
+ "clear_reticulum_docs_desc": "Poistaa kaikki ladatut Reticulum-dokumentaatiot ja versiot.",
+ "clear_path_table": "Tyhjää polkutaulukko",
+ "clear_path_table_desc": "Unohda välimuistissa olevat Reticulum-välityksen polut. Reitit löydetään uudelleen tarpeen mukaan.",
+ "path_table_cleared": "Polkutaulukko tyhjätty",
+ "export_messages": "Vie viestejä",
+ "export_messages_desc": "Lataa kaikki keskustelut JSON-tiedostona.",
+ "import_messages": "Tuo viestejä",
+ "import_messages_desc": "Palauta keskustelut JSON-tiedostosta.",
+ "clear_confirm": "Oletko varma? Toimintoa ei voi peruuttaa.",
+ "messages_cleared": "Viestit poistettu",
+ "announces_cleared": "Kuulutukset poistettu",
+ "favourites_cleared": "Suosikit poistettu",
+ "lxmf_icons_cleared": "LXMF-kuvakkeet poistettu",
+ "archives_cleared": "Arkistot tyhjätty",
+ "docs_cleared": "Reticulum-dokumentaatio poistettu",
+ "import_success": "Tuotiin {count} viestiä",
+ "import_failed": "Viestien tuonti epäonnistui",
+ "export_nomadnet_favourites": "Vie NomadNet-suosikit",
+ "import_nomadnet_favourites": "Tuo NomadNet-suosikit",
+ "nomadnet_favourites_exported": "NomadNet-suosikit viety",
+ "nomadnet_favourites_export_failed": "NomadNet-suosikkien vienti epäonnistui",
+ "nomadnet_favourites_imported": "NomadNet-suosikit tuotu",
+ "nomadnet_favourites_import_failed": "NomadNet-suosikkien tuonti tiedostosta epäonnistui"
},
"identities": {
- "title": "Identities",
- "eyebrow": "Account",
- "active_identity": "Active identity",
- "other_identities": "Other identities",
- "show_addresses": "Show addresses",
- "hide_addresses": "Hide addresses",
- "lxst_address": "LXST address",
- "switch_label": "Switch",
- "manage": "Manage and switch between multiple Reticulum identities.",
- "new_identity": "New Identity",
- "import": "Import",
- "import_hint": "Upload a key file or paste a Base32 identity key.",
- "export_all": "Export all identities",
- "export_all_success": "All identity keys exported",
- "export_all_failed": "Failed to export identities",
- "generate_fresh": "Generate a fresh Reticulum identity.",
- "display_name": "Display Name",
- "display_name_hint": "e.g. Secret Agent",
- "current": "Current",
- "switch": "Switch to this identity",
- "delete": "Delete identity",
- "no_identities": "No identities found",
- "create_first": "Create a new identity to get started.",
- "switch_confirm": "Switch to identity \"{name}\"?",
- "delete_confirm": "Are you sure you want to delete identity \"{name}\"? This cannot be undone.",
- "switched": "Identity switched successfully.",
- "created": "Identity created successfully",
- "deleted": "Identity deleted",
- "failed_load": "Failed to load identities",
- "enter_display_name_warning": "Please enter a display name",
- "failed_create": "Failed to create identity",
- "switch_scheduled": "Switch scheduled. Reloading application...",
- "failed_switch": "Failed to switch identity",
- "failed_delete": "Failed to delete identity",
- "key_control": "Identity key control",
- "export_key_file": "Export key file",
- "copy_base32": "Copy Base32 key",
- "upload_key_file": "Upload key file",
- "paste_base32": "Paste Base32",
- "paste_base32_placeholder": "Paste your base32 identity key here...",
- "confirm_restore": "Confirm restore",
- "restoring": "Restoring...",
- "identity_exported": "Identity key file exported",
- "identity_copied": "Identity Base32 key copied to clipboard",
- "identity_export_failed": "Failed to export identity",
- "identity_copy_failed": "Failed to copy identity",
- "identity_restored": "Identity imported.",
- "identity_restore_failed": "Identity restore failed",
- "no_identity_available": "No identity available",
- "message_count": "{count} messages"
+ "title": "Identiteetit",
+ "eyebrow": "Tili",
+ "active_identity": "Aktiivinen identiteetti",
+ "other_identities": "Muut identiteetit",
+ "show_addresses": "Näytä osoitteet",
+ "hide_addresses": "Piilotat osoitteet",
+ "lxst_address": "LXST-kohde",
+ "switch_label": "Vaihda",
+ "manage": "Hallinnoi ja vaihda Reticulum-identiteettejä.",
+ "new_identity": "Uusi identiteetti",
+ "import": "Tuo",
+ "import_hint": "Lataa avaintiedosto tai liitä Base32-identiteettiavain",
+ "export_all": "Vie kaikki identiteetit",
+ "export_all_success": "Kaikki identiteettiavaimet viety",
+ "export_all_failed": "Identiteettien vienti epäonnistui",
+ "generate_fresh": "Luo uusi Reticulum-identiteetti.",
+ "display_name": "Näyttönimi",
+ "display_name_hint": "esim. Salainen agentti",
+ "current": "Nykyinen",
+ "switch": "Vaihda tähän identiteettiin",
+ "delete": "Poista identiteetti",
+ "no_identities": "Identiteettejä ei löydy",
+ "create_first": "Luo identiteetti aloittaaksesi.",
+ "switch_confirm": "Vaihda identiteettiin \"{name}\"?",
+ "delete_confirm": "Haluatko varmasti poistaa identiteetin \"{name}\"? Toimintoa ei voi kumota.",
+ "switched": "Identiteetti vaihdettu.",
+ "created": "Identiteetti luotu",
+ "deleted": "Identiteetti poistettu",
+ "failed_load": "Identiteettien lataaminen epäonnistui",
+ "enter_display_name_warning": "Anna näyttönimi",
+ "failed_create": "Identiteetin luonti epäonnistui",
+ "switch_scheduled": "Vaihdetaan. Sovellusta ladataan uudelleen...",
+ "failed_switch": "Identiteetin vaihto epäonnistui",
+ "failed_delete": "Identiteetin poisto epäonnistui",
+ "key_control": "Identiteettiavaimen hallinta",
+ "export_key_file": "Vie avaintiedosto",
+ "copy_base32": "Kopioi Base32-avain",
+ "upload_key_file": "Tuo avaintiedosto",
+ "paste_base32": "Liitä Base32-avain",
+ "paste_base32_placeholder": "Liitä Base32-identiteettiavain tähän...",
+ "confirm_restore": "Vahvista palautus",
+ "restoring": "Palautetaan...",
+ "identity_exported": "Identiteetien avaintiedosto viety",
+ "identity_copied": "Identiteetin Base32-avain kopioitu leikepöydälle",
+ "identity_export_failed": "Identiteetin vienti epäonnistui",
+ "identity_copy_failed": "Identiteetin kopiointi epäonnistui",
+ "identity_restored": "Identiteetti tuotu.",
+ "identity_restore_failed": "Identiteetin palautus epäonnistui",
+ "no_identity_available": "Identiteettiä ei saatavilla",
+ "message_count": "{count} viestiä"
},
"about": {
- "title": "About",
- "third_party_licenses": "Third-party licenses",
+ "title": "Tietoja",
+ "third_party_licenses": "Kolmannen osapuolen lisenssit",
"version": "v{version}",
- "ui_build": "UI build {date}",
+ "ui_build": "UI koontiversio {date}",
"rns_version": "RNS {version}",
"lxmf_version": "LXMF {version}",
"python_version": "Python {version}",
- "config_path": "Config path",
- "database_path": "Database path",
- "database_size": "Database size",
- "database_health": "Database Health",
- "database_health_description": "Quick check, WAL tuning, and recovery tools for the MeshChatX database.",
- "running_checks": "Running checks...",
- "integrity": "Integrity",
- "journal_mode": "Journal mode",
- "wal_autocheckpoint": "WAL autocheckpoint",
- "page_size": "Page size",
- "pages_free": "Pages / Free",
- "free_space_estimate": "Free space estimate",
- "system_resources": "System Resources",
+ "config_path": "Kokoonpanon polku",
+ "database_path": "Tietokannan polku",
+ "database_size": "Tietokannan koko",
+ "database_health": "Tietokannan eheys",
+ "database_health_description": "MeshChatX-tietokannan tarkistus, WAL-säätö ja palautustyökalut.",
+ "running_checks": "Tarkistetaan...",
+ "integrity": "Eheys",
+ "journal_mode": "Lokimoodi",
+ "wal_autocheckpoint": "WAL automaattinen tarkistuspiste",
+ "page_size": "Sivun koko",
+ "pages_free": "Sivut / Vapaa",
+ "free_space_estimate": "Vapaan tilan arvio",
+ "system_resources": "Järjestelmäresurssit",
"live": "Live",
- "memory_rss": "Memory (RSS)",
- "virtual_memory": "Virtual Memory",
- "network_stats": "Network Stats",
- "sent": "Sent",
- "received": "Received",
- "packets_sent": "Packets Sent",
- "packets_received": "Packets Received",
- "reticulum_stats": "Reticulum Stats",
- "total_paths": "Total Paths",
- "announces_per_second": "Announces / sec",
- "announces_per_minute": "Announces / min",
- "announces_per_hour": "Announces / hr",
- "download_activity": "Download Activity",
- "no_downloads_yet": "No downloads yet",
- "runtime_status": "Runtime Status",
- "shared_instance": "Shared Instance",
- "standalone_instance": "Standalone Instance",
- "transport_enabled": "Transport Enabled",
- "transport_disabled": "Transport Disabled",
- "identity_addresses": "Identity & Addresses",
- "telephone_address": "Telephone Address",
- "security_integrity": "Integrity Monitor",
- "security_integrity_description": "Advisory tamper-evidence. Detects unexpected changes to your identity and database files between startups. It is not tamper-proofing and does not protect against an attacker with access to this account.",
- "secured": "No changes detected",
- "tampering_detected": "Changes detected",
- "technical_issues": "Technical Issues:",
- "integrity_backend_error": "The application backend binary (unpacked from ASAR) appears to have changed since the last snapshot. If you did not update or modify it, review the change.",
- "integrity_data_error": "Your identity or database files appear to have changed while the app was closed.",
- "integrity_warning_footer": "This is advisory, not a confirmed compromise. If you updated the app or edited these files yourself, you can acknowledge to reset the baseline.",
- "no_integrity_violations": "No unexpected changes to monitored files since last startup.",
- "dependency_chain": "Dependency Chain",
+ "memory_rss": "Muisti (RSS)",
+ "virtual_memory": "Näennäismuisti",
+ "network_stats": "Verkon tilastot",
+ "sent": "Lähetetty",
+ "received": "Vastaanotettu",
+ "packets_sent": "Paketteja lähetetty",
+ "packets_received": "Paketteja vastaanotettu",
+ "reticulum_stats": "Reticulum-tilastot",
+ "total_paths": "Polkuja kaikkiaan",
+ "announces_per_second": "Kuulutukset / s",
+ "announces_per_minute": "Kuulutukset / min",
+ "announces_per_hour": "Kuulutukset / h",
+ "download_activity": "Lataukset",
+ "no_downloads_yet": "Ei vielä latauksia",
+ "runtime_status": "Ajonaikainen tila",
+ "shared_instance": "Jaettu instanssi",
+ "standalone_instance": "Erillinen instanssi",
+ "transport_enabled": "Välitys päällä",
+ "transport_disabled": "Välitys pois",
+ "identity_addresses": "Identiteetit ja kohteet",
+ "telephone_address": "Puhelukohde",
+ "security_integrity": "Suojauksen eheys",
+ "security_integrity_description": "System verification status for backend and data files Järjestelmän tarkistustila taustapalveluille ja tiedostoille",
+ "secured": "Suojattu",
+ "tampering_detected": "Peukalointi havaittu",
+ "technical_issues": "Tekniset ongelmat:",
+ "integrity_backend_error": "Sovelluksen taustapalvelun binääritiedosto (ASAR:sta) vaikuttaa olevan muutettu tai vaihdettu. Tämä voi tarkoittaa, että joku yrittää vaarantaa mesh-viestintäsi.",
+ "integrity_data_error": "Identiteettejäsi tai tietokantaasi on muutettu sovelluksen ulkopuolella.",
+ "integrity_warning_footer": "Jatka varoen. Jos et itse muokannut tai päivittänyt näitä tiedostoja, asennuksesi voi olla vaarantunut.",
+ "no_integrity_violations": "Järjestelmä on eheä viime käynnistyksen jäljiltä.",
+ "dependency_chain": "Riippuvuusketju",
"app_name": "MeshChatX",
- "automatic_backups_desc": "Automated daily snapshots of your database.",
- "automatic_backups_title": "Automatic Backups",
- "backup_download_failed": "Failed to download backup",
- "backup_downloaded": "Backup downloaded",
- "backend_stack": "Backend Stack",
+ "automatic_backups_desc": "Automated daily snapshots of your databas Tietokannan automaattiset päivittäiset tilannekuvat.",
+ "automatic_backups_title": "Automaattiset varmuuskopiot",
+ "backup_download_failed": "Varmuuskopion lataaminen epäonnistui",
+ "backup_downloaded": "Varmuuskopio ladattu",
+ "backend_stack": "Takaosan pino",
"chrome_runtime": "Chrome",
- "contact_alternate": "Alternate",
- "contact_details": "Details",
- "contact_developer": "Contact Developer",
- "contact_support_title": "Contact & support",
- "contact_lxmf_address": "LXMF Address",
- "contact_propagation_hint": "Send to propagation node if you cant reach me!",
- "contact_open_messages": "Open conversation",
- "contact_copy_address": "Copy address",
- "donate_label": "Donate",
+ "contact_alternate": "Vaihtoehto",
+ "contact_details": "Yksityiskohdat",
+ "contact_developer": "Ota yhteyttä kehittäjään",
+ "contact_support_title": "Yhteys ja tuki",
+ "contact_lxmf_address": "LXMF-kohde",
+ "contact_propagation_hint": "Lähetä levityssolmuun, jos et saa minuun yhteyttä!",
+ "contact_open_messages": "Avaa keskustelu",
+ "contact_copy_address": "Kopioi kohde",
+ "donate_label": "Lahjoita",
"donate_monero_label": "Monero (XMR)",
- "donate_copy_monero": "Copy Monero address",
+ "donate_copy_monero": "Kopioi Monero-osoite",
"donate_kofi": "Ko-fi",
- "donate_buymeacoffee": "Buy Me a Coffee",
- "copied_label_to_clipboard": "{label} copied to clipboard",
- "core_runtime": "Core Runtime",
- "creating": "Creating...",
- "database_backups_desc": "Full snapshots of your communications database.",
- "database_backups_title": "Database Backups",
- "database_health_maintenance": "Database Health & Maintenance",
- "dep_lxmf_subtitle": "Lightweight Extensible Message Format",
- "dep_lxmfy_subtitle": "LXMF Bot framework",
- "dep_rns_subtitle": "Reticulum Network Stack",
- "download_backup": "Download Backup",
- "downloading": "Downloading...",
+ "donate_buymeacoffee": "Osta kahvit",
+ "copied_label_to_clipboard": "{label} kopioitu leikepöydälle",
+ "core_runtime": "Ytimen runtime",
+ "creating": "Luo...",
+ "database_backups_desc": "Kokonainen tilannekuva viestintätietokannastasi.",
+ "database_backups_title": "Tietokannan varmuuskopio",
+ "database_health_maintenance": "Tietokannan eheys ja hallinta",
+ "dep_lxmf_subtitle": "Kevyt laajennettava viestiformaatti (Lightweight Extensible Message Format)",
+ "dep_lxmfy_subtitle": "LXMF-bottikehys",
+ "dep_rns_subtitle": "Reticulum-verkkopino",
+ "download_backup": "Lataa varmuuskopio",
+ "downloading": "Lataa...",
"electron_runtime": "Electron",
- "environment_information": "Environment Information",
- "env_backend_url": "Backend URL",
- "env_language": "Language",
+ "environment_information": "Suoritusympäristön tiedot",
+ "env_backend_url": "Taustapalvelun URL",
+ "env_language": "Kieli",
"env_lxmf": "LXMF",
- "env_platform": "Platform",
+ "env_platform": "Alusta",
"env_python": "Python",
"env_rns": "RNS",
- "env_user_agent": "User Agent",
- "failed_to_copy_label": "Failed to copy {label}",
- "free_space": "Free Space",
- "identity_hash": "Identity Hash",
- "journal_short": "Journal",
- "local_snapshots_desc": "Create point-in-time restore points on disk.",
- "local_snapshots_title": "Local Snapshots",
- "lxmf_address": "LXMF Address",
- "lxst_engine": "LXST Engine",
- "main_instance_badge": "Main Instance",
+ "env_user_agent": "Käyttäjäagentti",
+ "failed_to_copy_label": "{label}:n kopiointi epäonnistui",
+ "free_space": "Vapaa tila",
+ "identity_hash": "Identiteetin tiiviste",
+ "journal_short": "Loki",
+ "local_snapshots_desc": "Luo levylle tilannekuva hetkestä.",
+ "local_snapshots_title": "Paikalliset tilannekuvat",
+ "lxmf_address": "LXMF-kohde",
+ "lxst_engine": "LXST-moottori",
+ "main_instance_badge": "Pääinstanssi",
"nodejs_runtime": "Node.js",
- "page_count_label": "Page Count",
- "pagination_page_of": "Page {current} of {total}",
- "path_unknown": "unknown",
- "recovery": "Recovery",
- "recovery_complete": "Database recovery finished.",
- "recovery_confirm": "Run database recovery? This runs a full integrity check and compacts the database (VACUUM). It can take a while and the app may feel unresponsive. This does not load a backup file.",
- "recovery_failed": "Recovery failed",
- "vacuum_complete": "Database vacuum finished.",
- "vacuum_failed": "Could not vacuum the database.",
- "reveal_config_file": "Reveal File",
- "reveal_database_file": "Reveal DB",
- "reticulum_config": "Reticulum Config",
- "shared_instance_badge": "Shared Instance: {address}",
- "shutdown_confirm": "Are you sure you want to shutdown the app? This will stop the server and close the application.",
- "snapshot_create": "Create",
- "snapshot_download": "Download",
- "snapshot_download_failed": "Failed to download snapshot",
- "snapshot_downloaded": "Snapshot downloaded",
- "snapshot_placeholder": "Snapshot label...",
- "snapshot_restore": "Restore",
+ "page_count_label": "Sivujen lukumäärä",
+ "pagination_page_of": "Sivu {current}/{total}",
+ "path_unknown": "tuntematon",
+ "recovery": "Palautus",
+ "recovery_complete": "Tietokannan palautus valmis.",
+ "recovery_confirm": "Palauta tietokanta? Toiminto suorittaa täyden eheystarkistuksen ja tiivistää tietokannan (VACUUM). Tämä voi viedä aikaa ja sovellus voi hidastua. Toiminto ei tuo varmuuskopiotiedostoa.",
+ "recovery_failed": "Palautus epäonnistui",
+ "vacuum_complete": "Tietokannan tiivistys valmis.",
+ "vacuum_failed": "Tietokannan tiivistys epäonnistui.",
+ "reveal_config_file": "Paljasta tiedosto",
+ "reveal_database_file": "Paljasta tietokanta",
+ "reticulum_config": "Reticulum-kokoonpano",
+ "shared_instance_badge": "Jaettu instanssi: {address}",
+ "shutdown_confirm": "Haluatko varmasti sammuttaa sovelluksen? Tämä pysäyttää palvelimen ja sulkee sovelluksen.",
+ "snapshot_create": "Luo",
+ "snapshot_download": "Lataa",
+ "snapshot_download_failed": "Tilannekuvan lataus epäonnistui",
+ "snapshot_downloaded": "Tilannekuva ladattu",
+ "snapshot_placeholder": "Tilannekuvan nimike...",
+ "snapshot_restore": "Palauta",
"tagline_after": ".",
- "tagline_lead": "A secure, resilient, and beautiful communications platform powered by the",
- "tagline_link": "Reticulum Network Stack",
- "technical_issues_detected": "Changes since last snapshot",
- "other_core_components": "Other Core Components",
- "backend_dependencies": "Backend Dependencies",
- "delete_snapshot_confirm": "Are you sure you want to delete this snapshot?",
- "snapshot_deleted": "Snapshot deleted",
- "failed_delete_snapshot": "Failed to delete snapshot",
- "delete_backup_confirm": "Are you sure you want to delete this backup?",
- "backup_deleted": "Backup deleted",
- "failed_delete_backup": "Failed to delete backup",
- "database_restored": "Database restored. Relaunching...",
- "failed_restore_snapshot": "Failed to restore snapshot",
- "restore_snapshot_confirm": "Are you sure you want to restore this snapshot? This will overwrite the current database and require an app relaunch.",
- "restore_from_file": "Restore from File",
- "restoring": "Restoring...",
- "restore_select_file": "Select a backup file to restore.",
- "restore_file_confirm": "Are you sure you want to restore from this backup file? This will overwrite the current database and require an app relaunch.",
- "failed_restore_file": "Failed to restore from file",
- "integrity_acknowledged": "Integrity issues acknowledged",
- "integrity_acknowledged_reset": "Integrity issues acknowledged and manifest reset",
- "integrity_acknowledge_confirm": "Are you sure you want to acknowledge these integrity issues? This will update the security manifest to match the current state of your files.",
- "failed_acknowledge_integrity": "Failed to acknowledge integrity issues",
- "shutdown_sent": "Shutdown command sent to server.",
- "identity_exported": "Identity key file exported",
- "identity_copied": "Identity Base32 key copied to clipboard"
+ "tagline_lead": "Suojattu, kestävä ja kaunis viestintäalusta, jonka pohjalla on",
+ "tagline_link": "Reticulum-verkkopino",
+ "technical_issues_detected": "Teknisiä ongelmia havaittu",
+ "other_core_components": "Muita ydinkomponentteja",
+ "backend_dependencies": "Taustapalvelun riippuvuudet",
+ "delete_snapshot_confirm": "Haluatko varmasti poistaa tilannekuvan?",
+ "snapshot_deleted": "Tilannekuva poistettu",
+ "failed_delete_snapshot": "Tilannekuvan poisto epäonnistui",
+ "delete_backup_confirm": "Haluatko varmasti poistaa tämän varmuuskopion?",
+ "backup_deleted": "Varmuuskopio poistettu",
+ "failed_delete_backup": "Varmuuskopion poisto epäonnistui",
+ "database_restored": "Tietokanta palautettu. Käynnistetään uudelleen...",
+ "failed_restore_snapshot": "Tilannekuvan palautus epäonnistui",
+ "restore_snapshot_confirm": "Haluatko varmasti palauttaa tämän tilannekuvan? Tämä korvaa nykyisen tietokannan ja vaatii uudelleenkäynnistyksen.",
+ "restore_from_file": "Palauta tiedostosta",
+ "restoring": "Palautetaan...",
+ "restore_select_file": "Valitse tiedosto palautusta varten.",
+ "restore_file_confirm": "Haluatko varmasti palauttaa tästä tiedostosta? Tämä kirjoittaa nykyisen tietokannan päälle ja vaatii sovelluksen uudelleenkäynnistyksen.",
+ "failed_restore_file": "Tiedostosta palauttaminen epäonnistui",
+ "integrity_acknowledged": "Eheysongelmat kuitattu",
+ "integrity_acknowledged_reset": "Eheysongelmien kuittaus ja turvatiedoston nollaus.",
+ "integrity_acknowledge_confirm": "Haluatko varmasti kuitata eheysongelmat? Tämä päivittää turvallisuustiedoston vastaamaan tietokannan nykyistä tilaa.",
+ "failed_acknowledge_integrity": "Eheysongelmien kuittaus epäonnistui",
+ "shutdown_sent": "Sammutuskäsky lähetetty palvelimelle.",
+ "identity_exported": "Identiteetien avaintiedosto viety",
+ "identity_copied": "Identiteetin Base32-avain kopioitu leikepöydälle"
},
"interfaces": {
- "title": "Interfaces",
- "manage": "Manage",
- "description": "Search, filter and export your Reticulum adapters.",
- "add_interface": "Add Interface",
- "edit_interface": "Edit Interface",
- "import": "Import",
- "export_all": "Export all",
- "search_placeholder": "Search by name, type, host...",
- "all": "All",
- "connected_only": "Connected only",
- "all_types": "All types",
- "no_interfaces_found": "No interfaces found",
- "no_interfaces_description": "Adjust your search or add a new interface.",
- "fixed_mtu_hint": "Optional. If set, must be at least {min} bytes (Reticulum minimum MTU).",
- "fixed_mtu_min": "Fixed MTU must be at least {min} bytes (Reticulum minimum).",
- "restart_required": "Restart required",
- "restart_description": "Reticulum MeshChatX must be restarted for any interface changes to take effect.",
- "restart_now": "Restart now",
- "failed_enable": "failed to enable interface",
- "failed_disable": "failed to disable interface",
- "delete_confirm": "Are you sure you want to delete this interface? This can not be undone!",
- "failed_delete": "failed to delete interface",
- "failed_export_all": "Failed to export interfaces",
- "failed_export_single": "Failed to export interface",
- "failed_reload": "Failed to reload Reticulum!",
+ "title": "Sovittimet",
+ "manage": "Hallinnoi",
+ "description": "Etsi, suodata ja vie Reticulum-sovittimia.",
+ "add_interface": "Lisää sovitin",
+ "edit_interface": "Muokkaa sovittimia",
+ "import": "Tuo",
+ "export_all": "Vie kaikki",
+ "search_placeholder": "Etsi nimellä, tyypillä tai palvelimella...",
+ "all": "Kaikki",
+ "connected_only": "Vain liitetyt",
+ "all_types": "Kaikki tyypit",
+ "no_interfaces_found": "Sovittimia ei löydy",
+ "no_interfaces_description": "Muokkaa hakuasi tai lisää sovitin.",
+ "fixed_mtu_hint": "Valinnainen. Jos asetettu, täytyy olla vähintään {min} tavua (Reticulumin vähimmäis-MTU).",
+ "fixed_mtu_min": "Kiinteä MTU pitää olla vähintään {min} tavua (Reticulumin vähimmäisvaatimus).",
+ "restart_required": "Uudelleenkäynnistys vaaditaan",
+ "restart_description": "Reticulum MeshChatX on käynnistettävä uudelleen, jotta muutokset sovittimiin astuvat voimaan.",
+ "restart_now": "Käynnistä uudelleen nyt",
+ "failed_enable": "sovittimen liittäminen epäonnistui",
+ "failed_disable": "sovittimen irrottaminen epäonnistui",
+ "delete_confirm": "Haluatko varmasti poistaa tämän sovittimen? Toimintoa ei voi kumota!",
+ "failed_delete": "sovittimien poisto epäonnistui",
+ "failed_export_all": "Sovittimien vienti epäonnistui",
+ "failed_export_single": "Sovittimen vienti epäonnistui",
+ "failed_reload": "Reticulumin lataus epäonnistui!",
"interface_not_found": "Muokattavaksi valittua sovitinta ei löydy.",
"discovery_settings_saved": "Havaintoasetukset tallennettu",
"discovery_list_refreshed": "Havaitut sovittimet virkistetty.",
@@ -926,7 +926,7 @@
"discovery_default_bootstrap_docs_link": "Katso Reticulum bootstrapping connectivity.",
"backbone_transport_identity_label": "Välitysidentiteetti (valinnainen)",
"backbone_transport_identity_placeholder": "e53433e51cde34c42a3245ba3fe1ad69",
- "backbone_transport_identity_hint": "Vastaa Reticulum-runkosovittimia, joille on asetettu pelkästään verkko-osoite ja kohdeportti. Käytä hajautusarvoa, jos operaattori tai hakemisto ilmoittaa sen.",
+ "backbone_transport_identity_hint": "Vastaa Reticulum-runkosovittimia, joille on asetettu pelkästään verkko-osoite ja kohdeportti. Käytä tiivistea, jos operaattori tai hakemisto ilmoittaa sen.",
"loopback_local_title": "Paikallinen / silmukka",
"loopback_local_body": "Reticulum käyttää jaettu sisäistä instanssia. Keskustellaksesi toisen paikallisen RNS-prosessin kanssa, osoita TCP-asiakassovitin osoitteeseen 127.0.0.1 ja instanssin porttiin tai liitä ulkoinen sovitinmoduuli.",
"loopback_local_docs_hint": "Tutustu tuettuihin tyyppeihin luvusta Interfaces.",
@@ -961,7 +961,6 @@
"find_more_nodes": "Etsi lisää solmuja",
"quick_import": "Pikatuonti",
"quick_import_paste_hint": "Liitä raaka kokoonpano",
- "quick_import_placeholder": "[Sovittimen nimi]\\ntype = TCPClientInterface\\ntarget_host = 1.2.3.4",
"quick_import_apply": "Käytä: {name}",
"discovered_network_name": "Verkon nimi",
"discovered_passphrase": "Salalause",
@@ -1035,8 +1034,8 @@
"tile_connectivity_retry": "Hae laatat uudelleen",
"tile_connectivity_use_offline": "Käytä yhteydetöntä tilaa",
"tile_connectivity_dismiss": "Hylkää",
- "tile_failover_trying": "Map tiles failed; trying {provider}…",
- "tile_failover_offline": "Online tiles unavailable; switching to offline mode",
+ "tile_failover_trying": "Karttalaattojen lataus epäonnistui; yritetään {provider}…",
+ "tile_failover_offline": "Verkossa olevat laatat eivät ole saatavilla; vaihdetaan yhteydettömään tilaan",
"search_no_results": "Ei tuloksia",
"custom_tile_server_unavailable": "Mukautettu laattapalvelin ei ole saatavilla yhteydettömässä tilassa",
"custom_nominatim_unavailable": "Mukautettu Nominatim-palvelin ei ole saatavilla yhteydettömässä tilassa",
@@ -1140,30 +1139,30 @@
"drop_map_files_hint": "GeoJSON, KML, KMZ tai MBTiles",
"drop_no_geo_files": "GeoJSON, KML, tai KMZ -tiedostoa ei havaittu.",
"drop_no_supported_files": "GeoJSON-, KML-, KMZ- tai MBTiles-tiedostoa ei havaittu.",
- "new_tab": "New map",
- "new_tab_shortcut": "New map (Ctrl+T)",
- "tab_default_name": "Map {number}",
- "tab_rename_hint": "Double-click or double-tap to rename"
+ "new_tab": "Uusi kartta",
+ "new_tab_shortcut": "Uusi kartta (Ctrl+T)",
+ "tab_default_name": "Kartta {number}",
+ "tab_rename_hint": "Kaksoisklikkaa tai -napauta nimetäksesi uudelleen"
},
"interface": {
- "disable": "Disable",
- "enable": "Enable",
- "edit_interface": "Edit Interface",
- "export_interface": "Export Interface",
- "delete_interface": "Delete Interface",
- "listen": "Listen",
- "forward": "Forward",
- "port": "Port",
- "frequency": "Frequency",
- "bandwidth": "Bandwidth",
- "txpower": "TX Power",
+ "disable": "Älä käytä",
+ "enable": "Käytä",
+ "edit_interface": "Muokkaa sovittimia",
+ "export_interface": "Vie sovitin",
+ "delete_interface": "Poista sovitin",
+ "listen": "Kuuntele",
+ "forward": "Välitä",
+ "port": "Portti",
+ "frequency": "Taajuus",
+ "bandwidth": "Kaista",
+ "txpower": "TX teho",
"spreading_factor": "SF",
- "coding_rate": "Coding Rate",
+ "coding_rate": "Koodaustaajuus",
"bitrate": "Bitrate",
"tx": "TX",
"rx": "RX",
"noise": "Kohina",
- "clients": "Clients",
+ "clients": "Asiakkaat",
"link_up": "Yhteys päällä",
"link_down": "Yhteys pois",
"link_unknown": "Yhteyden tila tuntematon"
@@ -1171,10 +1170,10 @@
"messages": {
"title": "Viestit",
"conversations": "Keskustelut",
- "announces": "Announces",
+ "announces": "Kuulutukset",
"search_placeholder": "Hae {count} keskustelusta...",
"unread": "Lukematon",
- "failed": "Failed",
+ "failed": "Epäonnistunut",
"attachments": "Liitteet",
"no_messages_yet": "Ei vielä viestejä",
"loading_conversations": "Ladataan keskusteluja...",
@@ -1183,11 +1182,11 @@
"no_search_results": "Ei tuloksia",
"try_another_search": "Yritä toista hakusanaa",
"no_search_results_conversations": "Yksikään keskustelu ei vastannut hakuasi.",
- "search_placeholder_announces": "Search {count} recent announces...",
+ "search_placeholder_announces": "Hae {count} viimeaikaisesta kuulutuksesta...",
"no_peers_discovered": "Osallistujia ei löytynyt",
"waiting_for_announce": "Odotetaan kuulutuksia!",
"no_search_results_peers": "Yksikään osallistuja ei vastannut hakuasi!",
- "direct": "Direct",
+ "direct": "Suorat",
"downloading": "Ladataan",
"hops": "{count} hyppyä",
"hops_away": "{count} hypyn etäisyydellä",
@@ -1196,8 +1195,8 @@
"stamp_ticket_valid": "Lähtevien viestien merkintä on voimassa (toimitus heti). Vanhenee {expires}.",
"stamp_ticket_expired": "Leimamerkintä on vanhentunut; seuraava viesti voi vaatia PoW-työtä.",
"pop_out_chat": "Irrota keskustelu",
- "open_in_split": "Open in split view",
- "select_conversation_for_pane": "Select a conversation to open it here",
+ "open_in_split": "Avaa jaetussa näkymässä",
+ "select_conversation_for_pane": "Valitse keskustelu avataksesi sen tässä",
"more_actions": "Lisää toimintoja",
"retry_failed": "Lähetä uudelleen epäonnistuneet viestit",
"telemetry_history": "Käyttötietojen historia",
@@ -1233,55 +1232,55 @@
"sending_ellipsis": "Lähetetään…",
"outbound_pending_propagation": "Lähetetään levityssolmuun…",
"outbound_pending_propagation_with_progress": "Lähetetään levityssolmuun… {progress}%",
- "outbound_solving_stamps": "Solving stamps…",
- "outbound_solving_stamps_short": "Solving stamps",
- "outbound_pathfinding_tooltip": "Finding path: Reticulum is resolving a route to this peer. Your message sends when the route is ready.",
- "outbound_pathfinding_short": "Finding path",
- "path_no_route": "No path",
- "path_no_route_hint": "No route to this peer yet. Use the path finder or send a message to discover one.",
- "path_loading": "Checking path…",
- "path_stale_label": "stale",
- "path_unresponsive_label": "unresponsive",
- "path_stale_hint": "This path entry is expired and may be rediscovered before the next send.",
- "path_unresponsive_hint": "Reticulum marked this path as unresponsive.",
- "path_info_title": "Path information",
- "path_already_available": "Path is already available",
- "outbound_preparing_message": "Preparing message…",
- "outbound_preparing_message_short": "Preparing message",
- "outbound_sending_with_progress": "Sending… {progress}%",
- "transfer_progress_hop_one": "1 hop",
- "transfer_progress_hops": "{count} hops",
- "outbound_sending_short": "Sending",
- "outbound_pending": "Pending",
- "outbound_outbound_short": "Outbound",
- "send_pathfinding_tooltip": "Finding path to peer (Reticulum is resolving a route). Your message sends as soon as the route is ready. Hover status icons in the bubble for details.",
+ "outbound_solving_stamps": "Ratkaistaan leimoja…",
+ "outbound_solving_stamps_short": "Ratkaistaan leimoja",
+ "outbound_pathfinding_tooltip": "Etsitään polkua: Reticulum etsii reittiä kohteeseen. Viestisi lähetetään, kun polku on olemassa.",
+ "outbound_pathfinding_short": "Polkua etsitään",
+ "path_no_route": "Ei polkua",
+ "path_no_route_hint": "Vertaisen luo ei ole vielä reittiä. Käytä polunetsintä tai lähetä viesti löytääksesi reitin.",
+ "path_loading": "Tarkistetaan polkua…",
+ "path_stale_label": "vanhentunut",
+ "path_unresponsive_label": "ei vastaa",
+ "path_stale_hint": "Polkumerkintä on vanhentunut, ja se saatetaan etsiä uudelleen seuraavan lähetyksen yhteydessä.",
+ "path_unresponsive_hint": "Reticulumin mukaan polku ei vastaa.",
+ "path_info_title": "Polun tiedot",
+ "path_already_available": "Polku on jo olemassa",
+ "outbound_preparing_message": "Valmistellaan viestiä…",
+ "outbound_preparing_message_short": "Valmistellaan viestiä",
+ "outbound_sending_with_progress": "Lähetetään… {progress}%",
+ "transfer_progress_hop_one": "1 hyppy",
+ "transfer_progress_hops": "{count} hyppyä",
+ "outbound_sending_short": "Lähetetään",
+ "outbound_pending": "Odottaa",
+ "outbound_outbound_short": "Lähtevä",
+ "send_pathfinding_tooltip": "Etsitään polkua vertaisen luo (Reticulum etsii reittiä). Viestisi lähetetään heti kun polku on valmis. Kohdista kuplan tilakuvakkeisiin lisätietoja varten.",
"outbound_on_propagation_node": "Levityssolmussa",
"outbound_sent_network": "Lähetetty",
"no_messages_in_conversation": "Tässä keskustelussa ei ole viestejä.",
"say_hello": "Sano hei!",
"no_active_chat": "Ei valittua keskustelua",
"mobile_compose_title": "Uusi viesti",
- "mobile_compose_destination_placeholder": "32 merkin kohdearvo…",
- "select_peer_or_enter_address": "Valitse osallistuja sivupalkista tai anna kohdearvo alle",
+ "mobile_compose_destination_placeholder": "32 merkin tiiviste…",
+ "select_peer_or_enter_address": "Valitse osallistuja sivupalkista tai anna tiiviste alle",
"add_files": "Lisää tiedostoja",
"paste_from_clipboard": "Liitä leikepöydältä",
- "location": "Location",
+ "location": "Sijainti",
"share_location": "Jaa sijainti",
"request_location": "Pyydä sijaintia",
"view_on_map": "Näytä kartalla",
"request": "Pyyntö",
"generate_paper_message": "Tee paperiviesti (LXM)",
"ingest_paper_message": "Lue paperiviesti",
- "scan_qr": "Scan QR Code",
+ "scan_qr": "Lue QR-koodi",
"scanner_hint": "Osoita kamerasi lxmf://, lxma://, or lxm:// -QR-koodiin.",
- "camera_not_supported": "Camera QR scanning is not supported in this browser.",
- "camera_permission_denied": "Camera permission denied. Please allow camera access.",
- "camera_not_found": "No camera device found.",
- "camera_failed": "Failed to start camera scanner.",
+ "camera_not_supported": "Selain ei tue kameran QR-lukua.",
+ "camera_permission_denied": "Kameralupa evätty. Salli kameran käyttö.",
+ "camera_not_found": "Kameraa ei löytynyt.",
+ "camera_failed": "Kameralukijan käynnistys epäonnistui.",
"invalid_qr_uri": "Kelvoton QR-sisältö. Odotettiin lxmf://, lxma:// tai lxm:// -URIa.",
"recording": "Tallennetaan: {duration}",
"nomad_network_node": "Nomad-verkon solmu",
- "toggle_source": "Toggle Source Code",
+ "toggle_source": "Lähdekoodin näyttö",
"folder_created": "Kansio luotu",
"failed_create_folder": "Kansion luonti epäonnistui",
"folder_renamed": "Kansio nimetty uudelleen",
@@ -1294,9 +1293,9 @@
"failed_mark_read": "Luetuksi merkitseminen epäonnistui",
"conversations_deleted": "Keskustelut poistettu",
"failed_delete_conversations": "Keskustelujen poisto epäonnistui",
- "failed_export_folders": "Failed to export folders",
+ "failed_export_folders": "Kansioiden vienti epäonnistui",
"folders_imported": "Kansiot tuotu",
- "failed_import_folders": "Failed to import folders",
+ "failed_import_folders": "Kansioiden tuonti epäonnistui",
"failed_read_clipboard": "Leikepöydän lukeminen epäonnistui",
"clipboard_read_requires_secure_context": "Leikepöytä luetaan vain suojatuilla sivuilla (https or http://127.0.0.1). http://0.0.0.0 tai muu ei-paikallinen HTTP lähde estää leikepöydän rajapinnan — avaa sovellus osoitteessa 127.0.0.1 tai käyttäen https-protokollaa, tai liitä painamalla Ctrl+V.",
"clipboard_write_unavailable": "Automaattinen kopiointi epäonnistui. Avaa https-protokollalla tai osoitteessa http://127.0.0.1, tai valitse teksti ja kopioi se käsin.",
@@ -1308,449 +1307,449 @@
"raw_path_interface_at_send": "Polun sovitin (tallentaessa)",
"raw_path_hops_at_send": "Polun hypyt (tallentaessa)",
"raw_path_value_unknown": "Tuntematon",
- "raw_path_finding_measure": "Pathfinding at send (outbound)",
- "raw_path_row_hash_rnpath": "Path table hash (rnpath)",
- "raw_path_row_hash_rnpath_hint": "The destination hash used by Reticulum for this route. You can find it in the path table.",
- "copy_message": "Copy message",
- "message_copied": "Message copied",
- "failed_copy_message": "Could not copy message",
- "failed_send_ingest": "Failed to send ingest request",
- "address_copied": "Your LXMF address copied to clipboard",
- "map_link_share_title": "Shared map view",
- "map_link_ping_title": "Map ping",
- "map_link_open": "Open on map",
- "map_link_copy_uri": "Copy meshchatx link",
- "map_link_copied": "Map link copied",
- "hash_copied": "Identity hash copied to clipboard",
- "failed_to_copy_hash": "Failed to copy identity hash",
- "copy_hash": "Copy Hash",
- "failed_copy_address": "Failed to copy address",
- "translation_failed": "Translation failed",
- "translate_select_target": "Translate to",
- "translating_message": "Translating...",
- "translated_from_to": "Translated from {source} to {target}",
- "show_original": "Show original",
- "show_translation": "Show translation",
- "translate_message": "Translate message",
- "translate_target_invalid": "Choose a different target language than the source",
- "failed_add_contact": "Failed to add contact",
- "ingesting_paper_message": "Ingesting paper message...",
- "failed_ingest_paper": "Failed to ingest paper message",
- "enter_display_name": "Enter a custom display name",
- "failed_update_display_name": "Failed to update display name",
- "failed_load_audio": "Failed to load audio attachment.",
- "no_contacts_telephone": "No contacts found in telephone",
- "failed_load_contacts": "Failed to load contacts",
- "location_request_sent": "Location request sent",
- "failed_send_location_request": "Failed to send location request",
- "fetching_location": "Fetching location...",
+ "raw_path_finding_measure": "Polun etsintä lähettäessä",
+ "raw_path_row_hash_rnpath": "Polkutaulukon tiiviste (rnpath)",
+ "raw_path_row_hash_rnpath_hint": "Tämän polun kohteen tiiviste, jota Reticulum käyttää. Löydät sen polkutaulukosta.",
+ "copy_message": "Kopioi viesti",
+ "message_copied": "Viesti kopioitu",
+ "failed_copy_message": "Viestin kopiointi epäonnistui",
+ "failed_send_ingest": "Lukupyyntö epäonnistui",
+ "address_copied": "LXMF-kohteesi on kopioitu leikepöydälle",
+ "map_link_share_title": "Jaettu karttanäkymä",
+ "map_link_ping_title": "Karttasijainti",
+ "map_link_open": "Avaa kartalla",
+ "map_link_copy_uri": "Kopioi MeshChatX-linkki",
+ "map_link_copied": "Karttalinkki kopioitu",
+ "hash_copied": "Identiteetin tiiviste kopioitu leikepöydälle",
+ "failed_to_copy_hash": "Identiteettiarvon kopiointi epäonnistui",
+ "copy_hash": "Kopioi tiiviste",
+ "failed_copy_address": "Kopiointi epäonnistui",
+ "translation_failed": "Käännös epäonnistui",
+ "translate_select_target": "Käännä kielelle",
+ "translating_message": "Kääntää...",
+ "translated_from_to": "Käännettiin kieleltä {source} kielelle {target}",
+ "show_original": "Näytä alkuperäinen",
+ "show_translation": "Näytä käännös",
+ "translate_message": "Käännä viesti",
+ "translate_target_invalid": "Valitse toinen kohdekieli",
+ "failed_add_contact": "Yhteyshenkilön lisääminen epäonnistui",
+ "ingesting_paper_message": "Luetaan paperiviestiä...",
+ "failed_ingest_paper": "Paperiviestin lukeminen epäonnistui",
+ "enter_display_name": "Syötä mukautettu näyttönimi",
+ "failed_update_display_name": "Näyttönimen päivitys epäonnistui",
+ "failed_load_audio": "Ääniliitteen lataus epäonnistui.",
+ "no_contacts_telephone": "Puhelimessa ei ole yhteystietoja",
+ "failed_load_contacts": "Yhteystietojen lataus epäonnistui",
+ "location_request_sent": "Sijaintipyyntö lähetetty",
+ "failed_send_location_request": "Sijaintipyynnön lähetys epäonnistui",
+ "fetching_location": "Noudetaan sijaintia...",
"location_disabled": "Location sharing is disabled. Enable it in Settings > Location.",
- "location_sent": "Location shared successfully",
- "location_requested": "Location requested",
- "remove_image_confirm": "Are you sure you want to remove this image attachment?",
- "failed_start_recording": "failed to start recording",
- "failed_start_recording_help_mediadevices": "This web view does not expose a microphone API.",
- "failed_start_recording_help_web_audio": "Web Audio is not available in this browser.",
- "failed_start_recording_help_audio_worklet": "AudioWorklet is not supported — OPUS voice notes require it.",
- "failed_start_recording_help_permission": "Allow microphone access, or try again after another app releases the microphone.",
- "remove_audio_confirm": "Are you sure you want to remove this audio attachment?",
- "failed_generate_qr": "Failed to generate QR",
- "enter_folder_name": "Enter folder name",
- "new_folder": "New Folder",
- "rename_folder": "Rename folder",
- "failed_render_qr": "Failed to render QR code",
- "uri_copied": "URI copied to clipboard",
- "failed_copy_uri": "Failed to copy URI",
- "paper_message_sent": "Paper message sent successfully",
- "failed_send_paper": "Failed to send paper message",
- "failed_load_config": "Failed to load configuration",
- "profile_icon_saved": "Profile icon saved successfully",
- "failed_save_profile_icon": "Failed to save profile icon",
- "select_colors_warning": "Please select both background and icon colors",
- "select_icon_warning": "Please select an icon",
- "changes_reset": "Changes reset to saved values",
- "profile_icon_removed": "Profile icon removed successfully",
- "user_banished": "User banished successfully",
- "failed_banish_user": "Failed to banish user",
- "banish_user": "Banish user",
- "banish_confirm": "Are you sure you want to banish this user? They will not be able to send you messages or establish links.",
- "delete_conversation_confirm": "Are you sure you want to delete this conversation?",
- "failed_delete_conversation": "failed to delete conversation",
- "delete_history_confirm": "Are you sure you want to delete all messages in this conversation? This can not be undone!",
- "failed_delete_history": "failed to delete history",
- "pin_conversation": "Pin conversation",
- "unpin_conversation": "Unpin conversation",
- "failed_toggle_pin": "Could not update pin",
- "opportunistic_deferred_label": "Waiting",
- "opportunistic_deferred_tooltip": "Message will send as soon as the user comes online or announces.",
- "failed_waiting_announce": "Failed, waiting for announce",
- "failed_waiting_announce_tooltip": "Delivery failed. Will resend automatically when the contact is reachable.",
- "invalid_destination_hash": "Invalid destination hash",
- "invalid_destination_hash_format": "Invalid destination hash format",
- "ping_failed": "Ping failed. Try again later",
- "ping_in_progress": "Pinging destination",
- "ping_reply_from": "Valid reply from {hash}",
- "duration": "Duration: {duration}",
- "hops_there": "Hops There: {count}",
- "hops_back": "Hops Back: {count}",
- "signal_quality": "Signal Quality: {quality}%",
+ "location_sent": "Sijainnin jako onnistui",
+ "location_requested": "Sijaintia pyydetty",
+ "remove_image_confirm": "Haluatko varmasti poistaa tämän kuvaliitteen?",
+ "failed_start_recording": "tallennuksen aloitus epäonnistui",
+ "failed_start_recording_help_mediadevices": "Rajapintaa mikrofonin käyttöön ei ole saatavilla tässä verkkonäkymässä.",
+ "failed_start_recording_help_web_audio": "Web Audio ei ole saatavilla tällä selaimella.",
+ "failed_start_recording_help_audio_worklet": "AudioWorklet ei ole tuettu — OPUS-ääniviestit vaativat sen.",
+ "failed_start_recording_help_permission": "Salli mikrofonin käyttö, tai yritä kun toinen sovellus vapauttaa mikrofonin käytön.",
+ "remove_audio_confirm": "Haluatko varmasti poistaa tämän ääniliitteen?",
+ "failed_generate_qr": "QR-koodin luonti epäonnistui",
+ "enter_folder_name": "Anna kansion nimi",
+ "new_folder": "Uusi kansio",
+ "rename_folder": "Nimeä kansio uudelleen",
+ "failed_render_qr": "QR-koodin näyttäminen epäonnistui",
+ "uri_copied": "URI kopioitu leikepöydälle",
+ "failed_copy_uri": "URIn kopiointi epäonnistui",
+ "paper_message_sent": "Paperiviestin lähetys onnistui",
+ "failed_send_paper": "Paperiviestin lähetys epäonnistui",
+ "failed_load_config": "Kokoonpanon lataus epäonnistui",
+ "profile_icon_saved": "Profiilikuva tallennettu",
+ "failed_save_profile_icon": "Profiilikuvan tallennus epäonnistui",
+ "select_colors_warning": "Valitse sekä taustan että kuvakkeen värit",
+ "select_icon_warning": "Valitse kuvake",
+ "changes_reset": "Muutokset palautetaan tallennettuihin arvoihin",
+ "profile_icon_removed": "Profiilikuva poistettu",
+ "user_banished": "Käyttäjä karkotettu",
+ "failed_banish_user": "Käyttäjän karkotus epäonnistui",
+ "banish_user": "Karkota käyttäjä",
+ "banish_confirm": "Haluatko varmasti karkottaa tämän käyttäjän? Hän ei voi lähettää viestejä tai luoda yhteyttä.",
+ "delete_conversation_confirm": "Haluatko varmasti poistaa tämän keskustelun?",
+ "failed_delete_conversation": "Keskustelun poisto epäonnistui",
+ "delete_history_confirm": "Haluatko varmasti poistaa kaikki tämän keskustelun viestit? Toimintoa ei voi kumota!",
+ "failed_delete_history": "Historian poisto epäonnistui",
+ "pin_conversation": "Kiinnitä keskustelu",
+ "unpin_conversation": "Poista keskustelun kiinnitys",
+ "failed_toggle_pin": "Kiinnityksen muutos epäonnistui",
+ "opportunistic_deferred_label": "Odotetaan",
+ "opportunistic_deferred_tooltip": "Viesti lähetetään heti, kun käyttäjä tulee paikalle tai kuuluttaa.",
+ "failed_waiting_announce": "Epäonnistui, odotetaan kuulutusta",
+ "failed_waiting_announce_tooltip": "Lähetys epäonnistui. Lähetetään automaattisesti uudelleen, kun yhteystieto on tulee saataville.",
+ "invalid_destination_hash": "Kohteen tiiviste ei kelpaa",
+ "invalid_destination_hash_format": "Kohteen tiivisteen muoto on väärä",
+ "ping_failed": "Yhteyskokeilu epäonnistui. Yritä uudelleen myöhemmin.",
+ "ping_in_progress": "Yhteyttä kokeillaan",
+ "ping_reply_from": "{hash} vastasi",
+ "duration": "Kesto: {duration}",
+ "hops_there": "Hyppyä perille: {count}",
+ "hops_back": "Hyppyä takaisin: {count}",
+ "signal_quality": "Signaalin laatu: {quality}%",
"rssi_val": "RSSI: {rssi}dBm",
"snr_val": "SNR: {snr}dB",
- "reply": "Reply",
- "replying_to": "Replying to",
- "forward_banner_label": "Forwarded message",
- "forward_you_shared": "You're forwarding this quote",
- "forward_pick_recipient_title": "Forward to contact",
- "forward_message": "Forward",
- "forward_sent": "Message forwarded",
- "forward_failed": "Could not forward message",
- "forward_no_lxmf_destination": "This contact has no usable LXMF delivery address.",
- "forward_verify_show": "Source and verification",
- "forward_verify_hide": "Hide verification",
- "forward_verify_explanation": "Paper LXMF links only work if the full message is available and fits Paper limits. Quoted snippets can be faked.",
- "forward_verify_loading": "Looking up verification URI…",
- "forward_verify_open_uri": "Open verification URI",
- "forward_verify_unavailable": "Original message bytes are not cached here, so no verification URI could be built.",
- "forward_verify_not_cached": "Original message bytes are not cached here.",
- "forward_verify_failed": "Verification lookup failed.",
- "forward_content_stub": "_Forwarded via MeshChatX_\nAttachments and quoted text belong to the original sender.",
- "forward_open_party_is_self": "That is your own address.",
- "message_actions": "Message actions",
+ "reply": "Vastaa",
+ "replying_to": "Vastataan",
+ "forward_banner_label": "Viesti välitetty",
+ "forward_you_shared": "Välität tämän lainauksen",
+ "forward_pick_recipient_title": "Välität henkilölle",
+ "forward_message": "Välitä",
+ "forward_sent": "Viesti välitetty",
+ "forward_failed": "Viestin välitys epäonnistui",
+ "forward_no_lxmf_destination": "Tällä yhteyshenkilöllä ei ole käyttökelpoista LXMF-kohdetta.",
+ "forward_verify_show": "Lähde ja todennus",
+ "forward_verify_hide": "Piilota todennus",
+ "forward_verify_explanation": "Paperiset LXMF-linkit toimivat vain, jos koko viesti on saatavilla ja mahtuu ylärajaan. Lainauksia pystytään väärentämään.",
+ "forward_verify_loading": "Tarkistetaan todennuksen URIa…",
+ "forward_verify_open_uri": "Avaa todennuksen URI",
+ "forward_verify_unavailable": "Alkuperäinen viesti ei ole saatavilla, joten todennus-URIa ei voi luoda.",
+ "forward_verify_not_cached": "Alkuperäinen viesti ei ole muistissa täällä.",
+ "forward_verify_failed": "Todennuksen haku epäonnistui.",
+ "forward_content_stub": "_Välitetty MeshChatX:n kautta_\nLiitteet ja lainattu teksti kuuluvat alkuperäiselle lähettäjälle.",
+ "forward_open_party_is_self": "Tämä on oma osoitteesi",
+ "message_actions": "Viestitoiminnot",
"save_image_to_device": "Tallenna kuva laitteelle",
"cancel_send": "Peruuta lähetys",
- "react": "React",
- "reaction_you": "You",
- "reaction_send_failed": "Could not send reaction",
- "conversation_reaction_preview": "{name} reacted {emoji}",
- "conversation_location_share_you": "You shared your location",
- "conversation_location_share_other": "{name} shared their location",
- "conversation_telemetry_preview": "{name} sent telemetry",
- "conversation_telemetry_stream_preview": "{name} sent a telemetry stream",
- "conversation_location_request_in_preview": "{name} requested your location",
- "conversation_location_request_out_preview": "{name} sent a location request",
- "conversation_image_you": "You sent an image",
- "conversation_image_other": "{name} sent an image",
- "conversation_voice_you": "You sent a voice note",
- "conversation_voice_other": "{name} sent a voice note",
- "conversation_file_you": "You sent a file",
- "conversation_file_other": "{name} sent a file",
- "conversation_files_you": "You sent {count} files",
- "conversation_files_other": "{name} sent {count} files",
- "message_not_found_in_cache": "Message not found in cache"
+ "react": "Reagoi",
+ "reaction_you": "Sinä",
+ "reaction_send_failed": "Reaktion lähetys epäonnistui",
+ "conversation_reaction_preview": "{name} reagoi {emoji}",
+ "conversation_location_share_you": "Jaoit sijaintisi",
+ "conversation_location_share_other": "{name} jakoi sijaintinsa",
+ "conversation_telemetry_preview": "{name} lähetti käyttötietonsa",
+ "conversation_telemetry_stream_preview": "{name} lähetti käyttötietovirran",
+ "conversation_location_request_in_preview": "{name} pyysi sijaintiasi",
+ "conversation_location_request_out_preview": "{name} lähetti sijaintipyynnön",
+ "conversation_image_you": "Lähetit kuvan",
+ "conversation_image_other": "{name} lähetti kuvan",
+ "conversation_voice_you": "Lähetit ääniviestin",
+ "conversation_voice_other": "{name} lähetti ääniviestin",
+ "conversation_file_you": "Lähetit tiedoston",
+ "conversation_file_other": "{name} lähetti tiedoston",
+ "conversation_files_you": "Lähetit {count} tiedostoa",
+ "conversation_files_other": "{name} lähetti {count} tiedostoa",
+ "message_not_found_in_cache": "Viestiä ei löytynyt välimuistista"
},
"settings": {
- "shortcut_saved": "Shortcut saved",
- "shortcut_deleted": "Shortcut deleted",
- "archived_pages_flushed": "Archived pages flushed.",
- "failed_enable_transport": "Failed to enable transport mode!",
- "failed_disable_transport": "Failed to disable transport mode!",
- "failed_reload_reticulum": "Failed to reload Reticulum!",
- "folders_exported": "Folders exported",
- "failed_export_folders": "Failed to export folders",
- "folders_imported": "Folders and mappings imported successfully",
- "failed_import_folders": "Failed to import folders",
- "share_apk_heading": "Share this install",
- "share_apk_desc": "Send the installed MeshChatX package over Bluetooth, Nearby Share, or another app. Only available in the Android app.",
- "share_apk_short_hint": "Opens the system share sheet for this APK.",
- "share_apk": "Share app (APK)",
- "share_apk_failed": "Could not open the share sheet for the APK.",
+ "shortcut_saved": "Näppäinoikotie tallennettu",
+ "shortcut_deleted": "Näppäinoikotie poistettu",
+ "archived_pages_flushed": "Arkisto puhdistettu.",
+ "failed_enable_transport": "Välitystilan kytkeminen päälle epäonnistui!",
+ "failed_disable_transport": "Välitystilan kytkeminen pois epäonnistui!",
+ "failed_reload_reticulum": "Reticulumin lataus epäonnistui!",
+ "folders_exported": "Kansiot viety",
+ "failed_export_folders": "Kansioiden vienti epäonnistui",
+ "folders_imported": "Kansiot ja oikotiet tuotu",
+ "failed_import_folders": "Kansioiden tuonti epäonnistui",
+ "share_apk_heading": "Jaa tämä asennus",
+ "share_apk_desc": "Lähetä asennettu MeshChatX-paketti Bluetoothilla, lähijaolla tai toisella sovelluksella. Tämä on mahdollista vain Android-sovelluksessa.",
+ "share_apk_short_hint": "Avaa järjestelmän jakoikkunan sovelluksen APK:lle.",
+ "share_apk": "Jaa sovellus (APK)",
+ "share_apk_failed": "Jakamisikkunan avaus epäonnistui.",
"nomad_micron_wasm_title": "Micron (WASM)",
- "nomad_micron_wasm_desc_before_link": "Use a faster engine (",
+ "nomad_micron_wasm_desc_before_link": "Käytä nopeampaa moottoria (",
"nomad_micron_wasm_link_label": "micron-parser-go",
- "nomad_micron_wasm_desc_after_link": "). When on, the WebAssembly build can load and be updated in settings. When off, Micron uses JavaScript only. Pick the default renderer below; you can still switch from the Nomad browser toolbar.",
- "nomad_micron_default_engine_title": "Default Micron renderer (.mu)",
- "nomad_micron_default_engine_desc": "JavaScript is the default. WebAssembly uses micron-parser-go when the engine above is enabled and the module has loaded.",
+ "nomad_micron_wasm_desc_after_link": "). Päällä ollessa WebAssembly-kokoonpano voidaan ladata ja päivittää asetuksissa. Poissa ollessa Micron käyttää pelkkää JavaScriptia. Valitse oletuskääntäjä alla; Nomad-selaimen työkalupalkista voi vaihtaa kääntäjää väliaikaisesti.",
+ "nomad_micron_default_engine_title": "Oletus Micron-kääntäjä (.mu)",
+ "nomad_micron_default_engine_desc": "JavaScript on oletus. WebAssembly käyttää micron-parser-go:ta, kun ylläoleva moottori on päällä ja ladattu.",
"nomad_micron_default_engine_option_js": "JavaScript (micron-parser)",
"nomad_micron_default_engine_option_wasm": "WebAssembly (micron-parser-go)",
- "micron_wasm_update_open_btn": "Update WASM engine…",
- "micron_wasm_update_modal_title": "Micron WASM engine",
- "micron_wasm_update_active_label": "Active override",
- "micron_wasm_update_active_source": "Source: {source}",
- "micron_wasm_update_source_github": "GitHub release (SHA-256 verified)",
- "micron_wasm_update_source_upload": "Local file (not verified)",
- "micron_wasm_update_active_size": "Size: {bytes} bytes",
- "micron_wasm_update_bundled_only": "Using the WASM bundled with this app. Nothing is fetched from the network until you use the actions below.",
- "micron_wasm_update_isolation_note": "The browser cannot fully isolate WebAssembly from JavaScript. This app only exposes Micron conversion through a narrow API; rendered HTML is still sanitized. wasm_exec.js always comes from the app bundle to match the Go runtime.",
- "micron_wasm_update_github_heading": "Install from GitHub release",
- "micron_wasm_update_github_url_hint": "Press Fetch so the MeshChat server downloads from GitHub (browser stays same-origin for CSP). Source path:",
- "micron_wasm_update_fetch_github": "Fetch and install",
- "micron_wasm_update_upload_heading": "Install from file",
- "micron_wasm_update_upload_warning": "Uploaded WASM is not authenticity-checked. Only use files you trust.",
- "micron_wasm_update_revert_bundled": "Remove override (use bundled WASM)",
- "micron_wasm_update_err_empty_tag": "Enter a release tag (for example v1.0.5).",
- "micron_wasm_update_err_not_wasm": "Choose a file whose name ends with .wasm.",
- "micron_wasm_update_err_too_large": "That file is too large to store as a runtime override.",
- "micron_wasm_update_err_too_small": "That file is too small to be a valid WASM module.",
- "micron_wasm_update_err_activate_failed": "Installed file could not be loaded (check wasm_exec compatibility or try another build). Override was removed.",
- "micron_wasm_update_toast_installed": "Installed Micron WASM {tag}.",
- "micron_wasm_update_toast_uploaded": "Installed WASM from your file.",
- "micron_wasm_update_toast_reverted": "Restored bundled Micron WASM."
+ "micron_wasm_update_open_btn": "Päivitä WASM-moottori…",
+ "micron_wasm_update_modal_title": "Micron WASM-moottori",
+ "micron_wasm_update_active_label": "Ohitus päällä",
+ "micron_wasm_update_active_source": "Lähde: {source}",
+ "micron_wasm_update_source_github": "GitHub-julkaisu (SHA-256 -todennettu)",
+ "micron_wasm_update_source_upload": "Paikallinen tiedosto (todentamaton)",
+ "micron_wasm_update_active_size": "Koko: {bytes} tavua",
+ "micron_wasm_update_bundled_only": "Käytetään sovelluksen sisäänrakennettua WASMia. Verkosta ei noudeta mitään, jos et käytä alla olevia toimintoja.",
+ "micron_wasm_update_isolation_note": "Selain ei pysty täysin eristämään WebAssemlyä JavaScriptistä. Sovellus paljastaa Micron-muunnoksen vain ohuelti; HTML-koodi siistitään joka tapauksessa. wasm_exec.js käytetään aina sovelluspaketista, jotta se on yhtenevä Go-runtimekomponentin kanssa.",
+ "micron_wasm_update_github_heading": "Asenna GitHub-julkaisu",
+ "micron_wasm_update_github_url_hint": "Napauta Nouda niin MeshChat-taustapalvelin lataa GitHubista (selaimen lähde pysyy samana sisällön suojauskäytännön (CSP) vuoksi). Lähteen polku:",
+ "micron_wasm_update_fetch_github": "Nouda ja asenna",
+ "micron_wasm_update_upload_heading": "Asenna tiedostosta",
+ "micron_wasm_update_upload_warning": "Ladattu WASM ei ole todennettu. Käytä vain luotettuja tiedostoja.",
+ "micron_wasm_update_revert_bundled": "Poista ohitus (käytä sovelluspaketin WASMia)",
+ "micron_wasm_update_err_empty_tag": "Anna julkaisun tagi (esim. v1.0.5).",
+ "micron_wasm_update_err_not_wasm": "Valitse tiedosto, jonka pääte on .wasm.",
+ "micron_wasm_update_err_too_large": "Tiedosto on liian suuri käytettäväksi ajonaikaiseen ohitukseen.",
+ "micron_wasm_update_err_too_small": "Tiedosto on liian pieni ollakseen kelvollinen WASM-moduuli.",
+ "micron_wasm_update_err_activate_failed": "Asennetun tiedoston lataus epäonnistui (tarkista wasm_exec-yhteensopivuus tai kokeile toista versiota). Ohitus poistettiin.",
+ "micron_wasm_update_toast_installed": "Asennettiin Micron WASM {tag}.",
+ "micron_wasm_update_toast_uploaded": "Asennettiin WASM tiedostosta.",
+ "micron_wasm_update_toast_reverted": "Palautettiin paketin Micron WASM."
},
"debug": {
- "title": "Debug Logs",
- "description": "Read application and access logs, filter by severity, and search when troubleshooting.",
- "tab_logs": "Logs",
- "tab_access_attempts": "Access attempts",
- "search_logs_placeholder": "Search logs...",
- "search_access_placeholder": "Search IP, path, outcome...",
- "level_all": "All levels",
- "anomalies_only": "Anomalies only",
- "outcome_all": "All outcomes",
- "loading_logs": "Loading logs...",
- "no_logs": "No logs found.",
- "loading_access": "Loading access attempts...",
- "no_access": "No access attempts recorded.",
- "failed_fetch_logs": "Failed to fetch logs",
- "failed_fetch_access": "Failed to fetch access attempts",
- "logs_copied": "Logs on this page copied to clipboard",
- "access_copied": "Access attempts copied to clipboard",
- "failed_copy_logs": "Failed to copy logs",
- "failed_copy_access": "Failed to copy access attempts"
+ "title": "Vianetsintälokit",
+ "description": "Lue sovelluksen ja pääsyn lokeja, suodata haavoittuvuustason mukaan, ja hae vikoja etsiessä.",
+ "tab_logs": "Lokit",
+ "tab_access_attempts": "Pääsy-yritykset",
+ "search_logs_placeholder": "Hae lokeista...",
+ "search_access_placeholder": "Haku-IP, polku, tulos...",
+ "level_all": "Kaikki tasot",
+ "anomalies_only": "Vain poikkeamat",
+ "outcome_all": "Kaikki tulokset",
+ "loading_logs": "Ladataan lokeja...",
+ "no_logs": "Lokeja ei löytynyt.",
+ "loading_access": "Ladataan pääsy-yrityksiä...",
+ "no_access": "Pääsy-yrityksiä ei löytynyt.",
+ "failed_fetch_logs": "Lokien nouto epäonnistui",
+ "failed_fetch_access": "Pääsy-yritysten nouto epäonnistui",
+ "logs_copied": "Sivun lokit kopioitu leikepöydälle",
+ "access_copied": "Pääsy-yritykset kopioitu leikepöydälle",
+ "failed_copy_logs": "Lokien kopiointi epäonnistui",
+ "failed_copy_access": "Pääsy-yritysten kopiointi epäonnistui"
},
"visualiser": {
- "title": "Network Visualiser",
- "description": "Graph of discovered nodes and links.",
+ "title": "Verkon havainnollistaja",
+ "description": "Havaittujen solmujen ja yhteyksiä kaavio.",
"reticulum_mesh": "Reticulum Mesh",
- "network_visualizer": "Network Visualizer",
- "node_info": "Node Info",
- "hash": "Hash",
- "hops": "Hops",
- "interface": "Interface",
+ "network_visualizer": "Verkon havainnollistaja",
+ "node_info": "Solmun tiedot",
+ "hash": "tiiviste (hash)",
+ "hops": "Hypyt",
+ "interface": "Sovitin",
"rssi": "RSSI",
"snr": "SNR",
- "first_seen": "First seen",
- "last_seen": "Last seen",
- "center_node": "Center on node",
- "copy_hash": "Copy Hash",
- "banish_identity": "Banish identity",
- "banished_identities": "Banished identities",
- "filter_nodes": "Filter nodes...",
- "all": "All",
- "direct": "Direct",
- "one_hop": "1 Hop",
- "multi_hops": "2+ Hops",
- "clear": "Clear",
- "show_labels": "Show all labels",
- "show_edges": "Show edges",
- "show_tooltips": "Show tooltips",
- "show_rssi": "Show RSSI",
- "show_snr": "Show SNR",
- "show_hops": "Show Hops",
- "physics": "Physics",
- "gravity": "Gravity",
- "spring_length": "Spring length",
- "spring_strength": "Spring strength",
- "damping": "Damping",
- "central_gravity": "Central gravity",
- "edge_strength": "Edge strength",
- "force_atlas_2": "Force Atlas 2",
- "barns_hut": "Barns Hut",
- "repulsion": "Repulsion",
- "reset_physics": "Reset physics",
- "reset_camera": "Reset Camera",
- "clear_graph": "Clear graph",
- "total_nodes": "Total nodes",
- "total_edges": "Total edges",
- "discovered": "Discovered",
- "wait_between_batches": "Wait between batches",
- "batch": "Batch",
- "loading_status": "Loading status",
- "failed_load": "Failed to load network data",
- "max_hops_filter": "Max hops",
- "show_disabled_interfaces": "Show offline interfaces",
- "show_discovered_interfaces": "Show discovered interfaces"
+ "first_seen": "Nähty ensimmäisen kerran",
+ "last_seen": "Nähty viimeksi",
+ "center_node": "Keskitä solmuun",
+ "copy_hash": "Kopioi tiiviste",
+ "banish_identity": "Karkota identiteetti",
+ "banished_identities": "Karkotetut identiteetit",
+ "filter_nodes": "Suodata solmuja...",
+ "all": "Kaikki",
+ "direct": "Suorat",
+ "one_hop": "1 hyppy",
+ "multi_hops": "2+ hyppyä",
+ "clear": "Tyhjää",
+ "show_labels": "Näytä kaikki nimikkeet",
+ "show_edges": "Näytä reunat",
+ "show_tooltips": "Näytä työkaluvihjeet",
+ "show_rssi": "Näytä RSSI",
+ "show_snr": "Näyt SNR",
+ "show_hops": "Näytä hypyt",
+ "physics": "Fysiikka",
+ "gravity": "Vetovoima",
+ "spring_length": "Jousen pituus",
+ "spring_strength": "Jousen vahvuus",
+ "damping": "Vaimennus",
+ "central_gravity": "Keskipisteen vetovoima",
+ "edge_strength": "Reunan voima",
+ "force_atlas_2": "Pakota Atlas 2",
+ "barns_hut": "Barnes-Hut",
+ "repulsion": "Hylkiminen",
+ "reset_physics": "Palauta fysiikka",
+ "reset_camera": "Palauta kamera",
+ "clear_graph": "Tyhjennä kaavio",
+ "total_nodes": "Solmut yhteensä",
+ "total_edges": "Reunat yhteensä",
+ "discovered": "Havaitut",
+ "wait_between_batches": "Odota erien välillä",
+ "batch": "Erä",
+ "loading_status": "Ladataan tilaa",
+ "failed_load": "Verkkodatan lataus epäonnistui",
+ "max_hops_filter": "Hyppyjen enimmäismäärä",
+ "show_disabled_interfaces": "Näytä käyttämättömät sovittimet",
+ "show_discovered_interfaces": "Näytä havaitut sovittimet"
},
"banishment": {
- "title": "Banished",
- "description": "Review and lift blocks on identities and nodes.",
- "failed_load_banished": "Failed to load banished destinations",
- "search_placeholder": "Search by hash or display name...",
- "loading_items": "Loading banished items...",
- "no_items": "No banished items found",
- "lift_banishment": "Lift Banishment",
- "lift_banishment_confirm": "Are you sure you want to lift the banishment for {name}?",
- "banished_at": "Banished at",
- "banished_until": "Banished until",
- "reason": "Reason",
- "type": "Type",
- "user": "User",
- "node": "Node",
- "blocked_destinations": "Blocked destinations",
- "banishment_lifted": "Banishment lifted successfully",
- "failed_lift_banishment": "Failed to lift banishment"
+ "title": "Karkotus",
+ "description": "Tarkastele ja poista identiteettien ja solmujen estoja.",
+ "failed_load_banished": "Karkotettujen identiteettien lataus epäonnistui",
+ "search_placeholder": "Hae kohdearvoa tai nimeä...",
+ "loading_items": "Ladataan karkotuksia...",
+ "no_items": "Karkotettuja kohteita ei löytynyt",
+ "lift_banishment": "Peruuta karkotus",
+ "lift_banishment_confirm": "Haluatko varmasti poistaa karkotuksen {name}?",
+ "banished_at": "Karkotettu",
+ "banished_until": "Karkotettu kunnes",
+ "reason": "Syy",
+ "type": "Tyyppi",
+ "user": "Käyttäjä",
+ "node": "Solmu",
+ "blocked_destinations": "Estetyt kohteet",
+ "banishment_lifted": "Karkotus peruttu",
+ "failed_lift_banishment": "Karkotuksen peruminen epäonnistui"
},
"nomadnet": {
- "remove_favourite": "Remove Favourite",
- "add_favourite": "Add Favourite",
- "identify": "Identify",
- "pop_out_browser": "Pop out browser",
- "new_tab": "New tab",
- "new_tab_shortcut": "New tab (Ctrl+T)",
- "page_archives": "Page Archives",
- "archive_current_version": "Archive Current Version",
- "no_archives_for_this_page": "No archives for this page",
- "viewing_archived_version_from": "Viewing archived version from {time}",
- "viewing_archived_version": "Viewing archived version",
- "load_live": "Load Live",
- "failed_to_load_page": "Failed to load page",
- "archived_version_available": "An archived version of this page is available.",
- "view_archive": "View Archive",
- "no_active_node": "No Active Node",
- "select_node_to_browse": "Select a Node to start browsing!",
- "open_nomadnet_url": "Open a Nomadnet URL",
- "unknown_node": "Unknown Node",
- "existing_download_in_progress": "An existing download is in progress. Please wait for it to finish before starting another download.",
- "favourites": "Favourites",
- "announces": "Announces",
- "search_favourites_placeholder": "Search {count} favourites...",
- "search_placeholder_announces": "Search {count} recent announces...",
- "rename": "Rename",
- "remove": "Remove",
- "no_favourites": "No favourites",
- "add_nodes_from_announces": "Add nodes from the announces tab.",
- "favourites_search_no_results": "No favourites match your search",
- "favourites_search_try_other": "Try a different search term.",
- "no_favourites_in_section": "No favourites in this section.",
- "search_announces": "Search announces",
- "announced_time_ago": "Announced {time} ago",
- "block_node": "Banish Node",
- "no_announces_yet": "No announces yet",
- "no_search_results_peers": "No peers found matching your search.",
- "listening_for_peers": "Listening for peers on the mesh.",
- "block_node_confirm": "Are you sure you want to banish {name}? Their announces will be ignored and they won't appear in the announce stream.",
- "node_blocked_successfully": "Node banished successfully",
- "failed_to_block_node": "Failed to banish node",
- "failed_rename_favourite": "Failed to rename favourite",
- "rename_favourite": "Rename this favourite",
- "remove_favourite_confirm": "Are you sure you want to remove this favourite?",
- "enter_nomadnet_url": "Enter a Nomadnet URL",
- "archiving_page": "Archiving page...",
- "page_archived_successfully": "Page archived successfully.",
- "identify_confirm": "Are you sure you want to identify yourself to this NomadNetwork Node? The page will reload after your identity has been sent.",
- "banishment_lifted": "Banishment lifted successfully",
- "failed_lift_banishment": "Failed to lift banishment",
- "lift_banishment": "Lift Banishment",
- "enter_section_name": "Enter section name",
- "new_section": "New Section",
- "rename_section": "Rename section",
- "delete_section_confirm": "Delete this section? Favourites will move to the main section.",
- "unsupported_url": "unsupported url: ",
- "path_away_suffix": "away",
+ "remove_favourite": "Poista suosikki",
+ "add_favourite": "Lisää suosikki",
+ "identify": "Tunnistaudu",
+ "pop_out_browser": "Irrota selain",
+ "new_tab": "Uusi välilehti",
+ "new_tab_shortcut": "Uusi välilehti (Ctrl+T)",
+ "page_archives": "Sivuarkistot",
+ "archive_current_version": "Arkisto nykyinen versio",
+ "no_archives_for_this_page": "Ei arkistoja tällä sivulla",
+ "viewing_archived_version_from": "Näytetään arkistoidut versiot {time} lähtien",
+ "viewing_archived_version": "Näytetään arkistoidut versiot",
+ "load_live": "Lataa live",
+ "failed_to_load_page": "Sivun lataus epäonnistui",
+ "archived_version_available": "Sivusta on arkistoitu versio.",
+ "view_archive": "Näytä arkisto",
+ "no_active_node": "Ei aktiivista solmua",
+ "select_node_to_browse": "Valitse solmu aloittaaksesi selailun!",
+ "open_nomadnet_url": "Avaa Nomadnet URL",
+ "unknown_node": "Tuntematon solmu",
+ "existing_download_in_progress": "Toinen lataus on kesken. Odota sen päättymistä ennen uuden latauksen aloittamista.",
+ "favourites": "Suosikit",
+ "announces": "Kuulutukset",
+ "search_favourites_placeholder": "Hae {count} suosikista...",
+ "search_placeholder_announces": "Hae {count} viimeaikaisesta kuulutuksesta...",
+ "rename": "Nimeä uudelleen",
+ "remove": "Poista",
+ "no_favourites": "Ei suosikkeja",
+ "add_nodes_from_announces": "Lisää solmuja kuulutusvälilehdeltä.",
+ "favourites_search_no_results": "Hakua vastaavia suosikkeja ei löydy",
+ "favourites_search_try_other": "Kokeile toista hakusanaa.",
+ "no_favourites_in_section": "Ei suosikkeja osiossa.",
+ "search_announces": "Hae kuulutuksista",
+ "announced_time_ago": "Kuulutettu {time} sitten",
+ "block_node": "Karkota solmu",
+ "no_announces_yet": "Ei kuulutuksia vielä",
+ "no_search_results_peers": "Hakua vastaavia osallistujia ei löydy.",
+ "listening_for_peers": "Kuunnellaan muita osallistujia.",
+ "block_node_confirm": "Haluatko varmasti karkottaa {name}? Osallistujan tulevat kuulutukset jätetään huomiota ja menneet kuulutukset poistetaan kuulutusvälilehdeltä.",
+ "node_blocked_successfully": "Solmu karkotettu",
+ "failed_to_block_node": "Solmun karkotus epäonnistui",
+ "failed_rename_favourite": "Suosikin nimeäminen uudelleen epäonnistui",
+ "rename_favourite": "Nimeä suosikki uudelleen",
+ "remove_favourite_confirm": "Haluatko varmasti poistaa tämän suosikin?",
+ "enter_nomadnet_url": "Anna Nomadnet URL",
+ "archiving_page": "Arkistoidaan sivua...",
+ "page_archived_successfully": "Sivu arkistoitu.",
+ "identify_confirm": "Haluatko varmasti tunnistautua tälle Nomadnet-solmulle? Sivu ladataan uudelleen tunnistautumisen jälkeen.",
+ "banishment_lifted": "Karkotus peruttu",
+ "failed_lift_banishment": "Karkotuksen peruminen epäonnistui",
+ "lift_banishment": "Peruuta karkotus",
+ "enter_section_name": "Anna osion nimi",
+ "new_section": "Uusi osio",
+ "rename_section": "Nimeä osio uudelleen",
+ "delete_section_confirm": "Poista tämä osio? Suosikit siirretään pääosioon.",
+ "unsupported_url": "URL ei tuettu: ",
+ "path_away_suffix": "poissa",
"renderer_chip_micron_js": "Micron JS",
"renderer_chip_micron_wasm": "Micron WASM",
"renderer_hint_micron_js": "micron-parser (JavaScript)",
"renderer_hint_micron_wasm": "micron-parser-go (WebAssembly)",
- "renderer_hint_micron_wasm_pending": "Faster version loading or unavailable. Using the standard version.",
- "renderer_popover_micron_wasm_powered": "Powered by ",
- "renderer_popover_micron_wasm_active_tail": " {version}. WebAssembly renderer.",
- "renderer_popover_micron_wasm_pending_tail": " {version} is loading or unavailable. Using the standard version.",
- "renderer_switch_title": "Parser",
+ "renderer_hint_micron_wasm_pending": "Nopeampaa versioda ladataan tai se ei ole saatavilla. Käytetään perusversiota.",
+ "renderer_popover_micron_wasm_powered": "Pohjana ",
+ "renderer_popover_micron_wasm_active_tail": " {version}. WebAssembly-kääntäjä.",
+ "renderer_popover_micron_wasm_pending_tail": " {version} ladataan tai se ei ole saatavilla. Käytetään perusversiota.",
+ "renderer_switch_title": "Jäsentäjä",
"renderer_menu_js": "Micron: JavaScript",
"renderer_menu_wasm": "Micron: WebAssembly",
- "renderer_setting_failed": "Could not update Micron renderer",
- "multiline_hint": "Press Enter again to expand to multi-line",
+ "renderer_setting_failed": "Micron-kääntäjän päivitys epäonnistui",
+ "multiline_hint": "Laajenna useaan riviin painamalla Enter uudelleen",
"renderer_chip_markdown": "Markdown",
"renderer_chip_html": "HTML",
- "renderer_chip_plaintext": "Text",
- "renderer_hint_markdown": "Markdown renderer",
- "renderer_hint_html": "Sanitized HTML",
- "renderer_hint_plaintext": "Escaped plain text",
- "load_phase_default": "Loading page",
- "load_phase_finding_path": "Looking for a network path to the node",
- "load_phase_establishing_link": "Establishing link to the node",
- "page_download_cancelled": "Download cancelled.",
- "load_phase_requesting_page": "Sending page request",
- "load_phase_transferring": "Receiving page",
- "path_finder": "Path Finder",
- "path_finder_quick_request": "Request path",
- "path_finder_force_find": "Force find path (wait)",
- "path_finder_drop_and_request": "Drop path and re-discover",
- "path_finder_load_archive": "Load latest archive snapshot",
- "path_finder_request_sent": "Path request sent",
- "path_finder_found": "Path found, retrying page",
- "path_finder_not_found": "No path found within timeout",
- "path_finder_dropped_and_requested": "Path dropped, requesting again",
- "path_finder_failed": "Path finder request failed",
- "path_finder_archive_loading": "Looking for archive snapshot...",
- "export_section_favourites": "Export section favourites",
- "section_favourites_exported": "Section favourites exported",
- "section_favourites_export_failed": "Could not export section favourites",
- "sidebar_selection_mode": "Selection mode",
- "bulk_selected_count": "{count} selected",
- "bulk_remove": "Remove",
- "bulk_move_to_section": "Move to section",
- "bulk_remove_favourites_confirm": "Remove {count} favourites from this device?",
- "bulk_remove_favourites_done": "Removed {count} favourites",
- "bulk_block_confirm": "Banish {count} nodes from the announce list?",
- "bulk_block_done": "Banished {count} nodes",
- "bulk_add_to_favourites": "Add to favourites",
- "bulk_add_favourites_done": "Added {count} nodes to favourites",
- "bulk_block_nodes": "Banish",
- "bulk_nothing_to_add_favourites": "Nothing to add (already favourites or none selected)"
+ "renderer_chip_plaintext": "Teksti",
+ "renderer_hint_markdown": "Markdown-tulkki",
+ "renderer_hint_html": "Siivottu HTML",
+ "renderer_hint_plaintext": "Pelkkä teksti",
+ "load_phase_default": "Ladataan sivua",
+ "load_phase_finding_path": "Etsitään verkkopolkua solmuun",
+ "load_phase_establishing_link": "Luodaan yhteyttä solmuun",
+ "page_download_cancelled": "Lataus peruutettu.",
+ "load_phase_requesting_page": "Pyydetään sivua",
+ "load_phase_transferring": "Vastaanotetaan sivua",
+ "path_finder": "Polkuetsin",
+ "path_finder_quick_request": "Pyydä polkua",
+ "path_finder_force_find": "Pakota polun etsiminen (odota)",
+ "path_finder_drop_and_request": "Unohda polku ja etsi uudelleen",
+ "path_finder_load_archive": "Lataa viimeisin arkistoversio",
+ "path_finder_request_sent": "Polkupyyntö lähetetty",
+ "path_finder_found": "Polku löydetty, ladataan sivua uudelleen",
+ "path_finder_not_found": "Polun etsintä aikakatkaistiin",
+ "path_finder_dropped_and_requested": "Polku unohdettu, pyydetään uutta",
+ "path_finder_failed": "Polunetsintäpyyntö epäonnistui",
+ "path_finder_archive_loading": "Etsitään vedosta arkistosta...",
+ "export_section_favourites": "Vie osion suosikit",
+ "section_favourites_exported": "Osion suosikit viety",
+ "section_favourites_export_failed": "Osion suosikkien vienti epäonnistui",
+ "sidebar_selection_mode": "Valintatila",
+ "bulk_selected_count": "{count} valittu",
+ "bulk_remove": "Poista",
+ "bulk_move_to_section": "Siirrä osioon",
+ "bulk_remove_favourites_confirm": "Poista {count} suosikkia laitteelta?",
+ "bulk_remove_favourites_done": "Poistettu {count} suosikkia",
+ "bulk_block_confirm": "Karkota {count} solmua kuulutuslistalta?",
+ "bulk_block_done": "Karkotettu {count} solmua",
+ "bulk_add_to_favourites": "Lisää suosikiksi",
+ "bulk_add_favourites_done": "Lisättiin {count} solmua suosikkeihin",
+ "bulk_block_nodes": "Karkota",
+ "bulk_nothing_to_add_favourites": "Ei lisättävää (solmut jo suosikeissa tai mitään ei ole valittu)"
},
"forwarder": {
- "title": "LXMF Forwarder",
- "description": "Forward LXMF between addresses with reply routing preserved.",
- "add_rule": "Add Forwarding Rule",
- "name": "Name",
- "name_placeholder": "Rule name (e.g. Home Node)...",
- "forward_to_hash": "Forward to Hash",
- "destination_placeholder": "Destination LXMF hash...",
- "source_filter": "Source Filter (Optional)",
- "source_filter_placeholder": "Only forward from this hash...",
- "add_button": "Add Rule",
- "active_rules": "Active Rules",
- "no_rules": "No forwarding rules configured.",
- "active": "Active",
- "disabled": "Disabled",
- "forwarding_to": "Forwarding to: {hash}",
- "source_filter_display": "Source filter: {hash}",
- "delete_confirm": "Are you sure you want to delete this rule?"
+ "title": "LXMF-välittäjä",
+ "description": "Välitä LXMF osoitteiden välillä säilyttäen vastausosoitteen.",
+ "add_rule": "Lisää välityssääntö",
+ "name": "Nimi",
+ "name_placeholder": "Säännön nimi (esim. kotisolmu)...",
+ "forward_to_hash": "Välitä kohteeseen",
+ "destination_placeholder": "Kohteen LXMF-tiiviste...",
+ "source_filter": "Lähteen suodatin (valinnainen)",
+ "source_filter_placeholder": "Välitä vain tältä lähettäjältä tulevat viestit...",
+ "add_button": "Lisää sääntö",
+ "active_rules": "Voimassa olevat säännöt",
+ "no_rules": "Välityssääntöjä ei ole asetettu.",
+ "active": "Käytössä",
+ "disabled": "Poissa käytöstä",
+ "forwarding_to": "Välitetään kohteeseen: {hash}",
+ "source_filter_display": "Lähteen suodatin: {hash}",
+ "delete_confirm": "Haluatko varmasti poistaa tämän säännön?"
},
"archives": {
- "description": "Search Nomad Network pages stored in your local archive.",
- "search_placeholder": "Search content, hash or path...",
- "loading": "Loading archives...",
- "no_archives_found": "No archives found",
- "adjust_filters": "Try adjusting your search filters.",
- "browse_to_archive": "Archived pages will appear here once you browse Nomad Network sites.",
- "page": "Page",
- "pages": "Pages",
- "view": "View",
- "showing_range": "Showing {start} to {end} of {total} archives",
- "page_of": "Page {page} of {total_pages}",
- "export_mu": "Export .mu",
- "export_selected_mu": "Export .mu ({count})"
+ "description": "Etsi Nomad Network -sivuja paikallisesta arkistosta.",
+ "search_placeholder": "Hae sisältöä, kohdetta tai polkua...",
+ "loading": "Ladataan arkistoa...",
+ "no_archives_found": "Arkistoja ei löydy",
+ "adjust_filters": "Kokeile muuttaa hakuasi.",
+ "browse_to_archive": "Arkistoidut sivut näytetään täällä, kun selaat Nomadnet-sivustoja.",
+ "page": "Sivu",
+ "pages": "Sivut",
+ "view": "Näytä",
+ "showing_range": "Näytetään {start} - {end} / {total} arkistosivusta",
+ "page_of": "Sivu {page} / {total_pages}",
+ "export_mu": "Vie .mu",
+ "export_selected_mu": "Vie .mu ({count})"
},
"docs": {
- "title": "Documentation",
- "subtitle": "Reticulum manual and MeshChatX guides, available offline after setup.",
- "status_title": "Documentation Status",
- "status_extracting": "Extracting Documentation...",
- "status_available": "Offline Manual Available",
- "status_not_available": "Manual Not Available",
- "btn_upload": "Upload Manual",
- "btn_share": "Share Reticulum manual as a re-uploadable ZIP",
- "empty_state_hint": "Upload a Reticulum manual ZIP to view it offline. Custom or updated documentation is supported.",
- "error": "Error",
- "failed_upload_docs": "Failed to upload documentation",
- "docs_link_copied": "Documentation link copied to clipboard",
- "failed_copy_link": "Failed to copy link"
+ "title": "Dokumentaatio",
+ "subtitle": "Reticulum-ohjekirja MeshChatX-ohjeet saatavilla ilman verkkoyhteyttä.",
+ "status_title": "Dokumentaation tila",
+ "status_extracting": "Viedään dokumentaatiota...",
+ "status_available": "Paikallinen ohjekirja saatavilla",
+ "status_not_available": "Ohjekirja ei ole saatavilla",
+ "btn_upload": "Tuo ohjekirja",
+ "btn_share": "Jaa Reticulum-ohjekirja ZIP-tiedostona, jonka voi myöhemmin tuoda sovellukseen",
+ "empty_state_hint": "Tuo Reticulum-ohjekirjan ZIP-tiedosto käyttääksesi sitä paikallisesti. Mukautukset ja päivitykset ovat tuettuja.",
+ "error": "Virhe",
+ "failed_upload_docs": "Dokumentaation tuominen epäonnistui",
+ "docs_link_copied": "Dokumentaation linkki kopioitu leikepöydälle",
+ "failed_copy_link": "Linkin kopiointi epäonnistui"
},
"licenses": {
- "section_label": "Legal",
- "title": "Third-party licenses",
- "description": "Shows versions and licenses for all software components. This data is collected from the local environment.",
- "short_description": "Dependency versions, authors, and licenses for backend and frontend.",
- "search_placeholder": "Search packages, versions, authors, licenses...",
- "generated_at": "Generated at {time}",
- "frontend_source": "Frontend data: {source}",
- "backend_section": "Backend (Python)",
- "frontend_section": "Frontend (Node)",
- "col_package": "Package",
- "col_version": "Version",
- "col_author": "Author",
- "col_license": "License"
+ "section_label": "Laki",
+ "title": "Kolmannen osapuolen lisenssit",
+ "description": "Näyttää kaikkien ohjelmistokomponenttien versiot ja lisenssit. Tiedot haetaan paikallisesta sovellusympäristöstä.",
+ "short_description": "Taustapalvelun ja käyttöliittymän riippuvuusversiot, tekijät ja lisenssit.",
+ "search_placeholder": "Hae paketteja, versioita, tekijöitä, lisenssejä...",
+ "generated_at": "Luotu {time}",
+ "frontend_source": "Käyttöliittymän tiedot: {source}",
+ "backend_section": "Taustapalvelu (Python)",
+ "frontend_section": "Käyttöliittymä (Node)",
+ "col_package": "Paketti",
+ "col_version": "Versio",
+ "col_author": "Tekijä",
+ "col_license": "Lisenssi"
},
"tools": {
"utilities": "Utilities",
@@ -1795,7 +1794,7 @@
"rnpath_trace": {
"title": "RNS Path Trace",
"description": "List each hop along the path to a destination hash.",
- "destination_hash": "Destination Hash",
+ "destination_hash": "Kohteen tiiviste",
"placeholder": "Enter 32-char destination hash...",
"trace": "Trace Path",
"tracing": "Tracing path through the mesh...",
@@ -1808,7 +1807,7 @@
"ping_test": "Test with Ping"
},
"translator": {
- "title": "Translator",
+ "title": "Kääntäjä",
"description": "Translate text with LibreTranslate over the network or Argos Translate on this device."
},
"forwarder": {
@@ -1828,7 +1827,7 @@
"add_rule": "Add rule",
"order_hint": "Drag order is top to bottom: the first matching rule applies.",
"empty_rules": "No rules yet. Add a rule or save an empty list to clear filters.",
- "enabled": "Enabled",
+ "enabled": "Päällä",
"move_up": "Move up",
"move_down": "Move down",
"remove_rule": "Remove rule",
@@ -1846,7 +1845,7 @@
"scope_contacts": "Contacts only",
"scope_non_contacts": "Non-contacts only",
"graph_scope_everyone": "Everyone",
- "graph_scope_contacts": "Contacts",
+ "graph_scope_contacts": "Yhteystiedot",
"graph_scope_non_contacts": "Non-contacts",
"graph_match_peer": "peer",
"graph_match_message": "msg",
@@ -1858,7 +1857,7 @@
"action_folder": "Move to folder",
"action_banish": "Banish sender (full block)",
"folder_label": "Folder",
- "save": "Save",
+ "save": "Tallenna",
"saving": "Saving…",
"revert": "Reload",
"saved": "Sieve filters saved",
@@ -1869,7 +1868,7 @@
"flow_source_hint": "Peer fields use announced display name, your custom name, and contact name or LXMF address.",
"flow_if": "If",
"flow_hide": "Hide",
- "flow_banish": "Banish",
+ "flow_banish": "Karkota",
"flow_folder": "Folder",
"flow_no_rules": "No rules"
},
@@ -1883,9 +1882,9 @@
"entries_heading": "Blocked phrases",
"add_entry": "Add phrase",
"empty_entries": "No phrases yet. Add entries or import a shared list.",
- "entry_enabled": "Active",
+ "entry_enabled": "Käytössä",
"entry_placeholder": "spam phrase or regex pattern",
- "remove_entry": "Remove",
+ "remove_entry": "Poista",
"scope_label": "Applies to",
"scope_everyone": "Everyone",
"scope_contacts": "Contacts only",
@@ -1896,8 +1895,8 @@
"match_mode_substring": "Word",
"match_mode_regex": "Regex",
"export": "Export",
- "import": "Import",
- "save": "Save",
+ "import": "Tuo",
+ "save": "Tallenna",
"saving": "Saving…",
"revert": "Reload",
"saved": "Blocklist saved",
@@ -1919,9 +1918,9 @@
"back_tools": "Back to tools",
"http_heading": "Plain HTTP mirror",
"host_label": "Listen address",
- "port_label": "Port",
+ "port_label": "Portti",
"start_http": "Start",
- "stop_http": "Stop",
+ "stop_http": "Pysäytä",
"restart_http": "Restart",
"http_listen_label": "Listening:",
"open_http": "Open in browser",
@@ -1945,11 +1944,11 @@
"refresh_partial": "Some packages could not be downloaded (details below)",
"refresh_partial_toast": "Bundled download finished with some failures",
"files_heading": "Files",
- "col_name": "Name",
- "col_source": "Source",
+ "col_name": "Nimi",
+ "col_source": "Lähde",
"col_size": "Size",
"empty": "No files yet. Upload a file or refresh bundled wheels.",
- "delete": "Delete",
+ "delete": "Poista",
"delete_confirm": "Delete uploaded file \"{name}\"?",
"delete_ok": "File removed",
"delete_failed": "Could not delete file",
@@ -1997,7 +1996,7 @@
"setting_hash_wait": "Setting Firmware Hash: please wait...",
"step_done": "5. Finalize",
"download_recommended": "Download & Load Recommended Firmware",
- "downloading": "Downloading...",
+ "downloading": "Lataa...",
"done_description": "If you made it this far, and all previous steps were successful, your RNode should be ready to use.",
"meshchat_usage": "To use RNode with MeshChat, you will need to add an RNodeInterface in the Interfaces → Add Interface page.",
"sideband_usage": "To use RNode with Sideband, you will need to configure it in Hardware → RNode and enable Connectivity → Connect via RNode.",
@@ -2017,23 +2016,23 @@
"bluetooth_info_5": "In Sideband you will need to enable Connect using Bluetooth in Hardware → RNode.",
"bluetooth_info_6": "If your device uses BLE you will also need to enable Device requires BLE in Hardware → RNode.",
"bluetooth_restart_warning": "Don't forget to restart Sideband for the setting changes to take effect!",
- "enable": "Enable",
- "disable": "Disable",
+ "enable": "Käytä",
+ "disable": "Älä käytä",
"start_pairing": "Start Pairing",
"configure_tnc": "Configure TNC Mode (optional)",
"tnc_info_1": "TNC mode allows an RNode to be used as a KISS compatible TNC over the Serial Port.",
"tnc_info_2": "This mode makes it usable with amateur radio software that can talk to a KISS TNC over a serial port.",
"tnc_warning": "You must leave TNC mode disabled when using RNode with apps like MeshChat or Sideband.",
"frequency": "Frequency (Hz)",
- "bandwidth": "Bandwidth",
+ "bandwidth": "Kaista",
"tx_power": "Tx Power (dBm)",
"spreading_factor": "Spreading Factor",
- "coding_rate": "Coding Rate",
+ "coding_rate": "Koodaustaajuus",
"configure_display": "Configure Display",
- "rotation": "Rotation",
+ "rotation": "Kierrä",
"reconditioning": "Reconditioning",
"start": "Start",
- "stop": "Stop",
+ "stop": "Pysäytä",
"rotation_v180_warning": "Setting display rotation requires firmware v1.80+",
"errors": {
"failed_download": "Failed to download firmware: {error}",
@@ -2136,7 +2135,7 @@
"needs_attention": "Needs attention",
"issues_detected": "Issues detected",
"firmware_version": "Firmware",
- "platform": "Platform",
+ "platform": "Alusta",
"board": "Board",
"provisioned": "Provisioned",
"product": "Product",
@@ -2159,11 +2158,11 @@
"description": "Write Nomad Network Micron pages with a live preview.",
"editor": "Editor",
"preview": "Preview",
- "save": "Save",
- "edit": "Edit",
+ "save": "Tallenna",
+ "edit": "Muokkaa",
"view_preview": "View Preview",
"placeholder": "Enter your Micron markup here...",
- "reset": "Reset",
+ "reset": "Palauta",
"new_tab": "New Tab",
"rename_tab": "Rename Tab",
"confirm_reset": "Are you sure you want to reset the editor? All your tabs and content will be lost.",
@@ -2186,8 +2185,8 @@
"info": "This is the raw Reticulum config file. Saving will not apply changes until RNS is restarted.",
"loading": "Loading config...",
"reload": "Reload",
- "save": "Save",
- "saving": "Saving...",
+ "save": "Tallenna",
+ "saving": "Tallennetaan...",
"saved": "Reticulum config saved",
"discard": "Discard",
"unsaved": "Unsaved changes",
@@ -2196,7 +2195,7 @@
"restored": "Reticulum config restored to defaults",
"confirm_restore": "Restore the Reticulum config to defaults? Your current config will be overwritten.",
"confirm_leave": "You have unsaved changes. Leave anyway?",
- "restart_required": "Restart required",
+ "restart_required": "Uudelleenkäynnistys vaaditaan",
"restart_description": "Reticulum must be restarted for your config changes to take effect.",
"restart_now": "Restart RNS now",
"restart_done": "Reticulum restarted",
@@ -2226,32 +2225,32 @@
"description": "Sync files between mesh peers (in development)."
},
"bots": {
- "title": "LXMFy Bots",
- "description": "Run simple LXMF bots (echo, notes, reminders) when the LXMFy add-on is installed."
+ "title": "LXMFy-botit",
+ "description": "Suorita yksinkertaisia LXMF-botteja (kaiku, muistiinpanot, muistutukset), kun LXMFy-liitännäinen on asennettu."
}
},
"ping": {
- "title": "Ping Mesh Peers",
- "description": "Only destinations that expose the ping app type will answer.",
- "destination_hash": "Destination Hash",
- "timeout_seconds": "Ping Timeout (seconds)",
- "start_ping": "Start Ping",
- "stop": "Stop",
- "clear_results": "Clear Results",
- "drop_path": "Drop Path",
- "status": "Status",
- "running": "Running",
- "idle": "Idle",
- "last_rtt": "Last RTT",
- "last_error": "Last Error",
- "console_output": "Console Output",
- "streaming_responses": "Streaming seq responses in real time",
- "no_pings_yet": "No pings yet. Start a run to collect RTT data.",
- "invalid_hash": "Invalid destination hash!",
- "timeout_must_be_number": "Timeout must be a number!"
+ "title": "Luotaa verkon vertaisia",
+ "description": "Vastaus tulee vain kohteilta, jotka sallivat luotauksen.",
+ "destination_hash": "Kohteen tiiviste",
+ "timeout_seconds": "Luotauksen aikakatkaisu (sekuntia)",
+ "start_ping": "Aloita luotaus",
+ "stop": "Pysäytä",
+ "clear_results": "Tyhjää tulokset",
+ "drop_path": "Unohda polku",
+ "status": "Tila",
+ "running": "Käynnissä",
+ "idle": "Toimeton",
+ "last_rtt": "Viimeisin RTT",
+ "last_error": "Viimeisin virhe",
+ "console_output": "Konsolin tuloste",
+ "streaming_responses": "Toistetaan vastaussarjaa reaaliaikaisesti",
+ "no_pings_yet": "Ei luotauksia vielä. Aloita luotaus kerätäksesi RTT-tietoja",
+ "invalid_hash": "Kohteen tiiviste ei kelpaa!",
+ "timeout_must_be_number": "Aikakatkaisun rajan on oltava numero!"
},
"relay_chat": {
- "title": "Relay Chat",
+ "title": "Keskustelukanavat",
"subtitle": "Reticulum Relay Chat hubs and rooms",
"hubs": "Hubs",
"add_hub": "Add Hub",
@@ -2287,13 +2286,13 @@
"auto_who": "Auto list members",
"nickname": "Nickname override",
"nickname_placeholder": "Leave blank to use display name",
- "save": "Save",
+ "save": "Tallenna",
"status_disconnected": "Disconnected",
"status_connecting": "Connecting",
"status_connected": "Connected",
- "status_failed": "Failed",
+ "status_failed": "Epäonnistunut",
"motd": "Message of the day",
- "system": "System",
+ "system": "Järjestelmä",
"hub_added": "Hub added",
"hub_removed": "Hub removed",
"settings_saved": "Settings saved",
@@ -2314,11 +2313,11 @@
"copy_hash": "Copy destination hash",
"hash_copied": "Destination hash copied",
"host_start": "Start",
- "host_status_running": "Running",
- "host_status_stopped": "Stopped",
+ "host_status_running": "Käynnissä",
+ "host_status_stopped": "Pysäytetty",
"host_hub_not_running": "Start the hub before managing rooms or members.",
- "host_stop": "Stop",
- "host_announce": "Announce now",
+ "host_stop": "Pysäytä",
+ "host_announce": "Kuuluta nyt",
"host_announced": "Announced",
"host_delete": "Delete hub",
"host_clients": "clients",
@@ -2385,7 +2384,7 @@
"ctx_leave_room": "Leave room",
"ctx_reply_quote": "Reply with quote",
"ctx_mention_user": "Mention user",
- "ctx_copy_message": "Copy message",
+ "ctx_copy_message": "Kopioi viesti",
"ctx_kick_user": "Kick user",
"ctx_ban_user": "Ban user",
"tab_discovery": "Discover",
@@ -2393,14 +2392,14 @@
"discovery_subtitle": "Relay Chat hubs heard announcing on the network.",
"discovery_empty": "No hubs discovered yet. They appear here as they announce.",
"discovery_search": "Search hubs",
- "discovery_add": "Add",
+ "discovery_add": "Lisää",
"discovery_added": "Hub added from discovery",
- "discovery_open": "Open",
+ "discovery_open": "Avaa",
"discovery_browse": "Browse discovered hubs",
- "announced_ago": "Announced {time} ago",
- "hops_away": "{count} hops",
+ "announced_ago": "Kuulutettu {time} sitten",
+ "hops_away": "{count} hyppyä",
"back": "Back",
- "refresh": "Refresh",
+ "refresh": "Virkistä",
"members_title": "Members",
"members_online": "Online",
"members_offline": "Offline",
@@ -2433,14 +2432,14 @@
"step_3": "3. To **fetch** a file, get the **Destination Hash** of a node listening with 'Allow Fetch' enabled, enter the **Remote File Path**, and click **Fetch File**.",
"send_file": "Send File",
"fetch_file": "Fetch File",
- "listen": "Listen",
- "destination_hash": "Destination Hash",
+ "listen": "Kuuntele",
+ "destination_hash": "Kohteen tiiviste",
"file_path": "File Path",
"timeout_seconds": "Timeout (seconds)",
"disable_compression": "Disable compression",
- "cancel": "Cancel",
+ "cancel": "Peru",
"progress": "Progress",
- "invalid_hash": "Invalid destination hash!",
+ "invalid_hash": "Kohteen tiiviste ei kelpaa!",
"provide_file_path": "Please provide a file path!",
"file_sent_successfully": "File sent successfully. Transfer ID: {id}",
"failed_to_send": "Failed to send file",
@@ -2469,7 +2468,7 @@
"receive_failed": "Receive failed",
"send_complete": "Send complete",
"fetch_complete": "Fetch complete",
- "transfer_status": "Status",
+ "transfer_status": "Tila",
"listening_active_background": "Listening continues in the background. Return here to manage or stop.",
"web_path_hint": "Browsers cannot expose full file paths. Use the desktop app to browse, or paste the full path to the file on this machine.",
"web_save_path_prompt": "Enter the absolute folder path on the machine running MeshChat (server) where the fetched file should be saved:"
@@ -2482,17 +2481,17 @@
"tab_sessions_short": "Sessions",
"tab_connect": "Connect",
"tab_connect_short": "Connect",
- "tab_listen": "Listen",
- "tab_listen_short": "Listen",
+ "tab_listen": "Kuuntele",
+ "tab_listen_short": "Kuuntele",
"fullscreen": "Full screen",
"exit_fullscreen": "Exit full screen",
"show_sessions": "Sessions",
"hide_sessions": "Back to terminal",
"sessions": "Sessions",
- "refresh": "Refresh",
+ "refresh": "Virkistä",
"name": "Session name",
"name_placeholder": "Ops shell",
- "listen_mode": "Listen",
+ "listen_mode": "Kuuntele",
"destination_hash": "Destination hash",
"destination_placeholder": "7a55144adf826958a9529a3bcf08b149",
"allowed_hashes": "Allowed identity hashes",
@@ -2506,14 +2505,14 @@
"session_output": "Session output",
"no_command_yet": "No command started yet",
"start": "Start",
- "stop": "Stop",
- "clear": "Clear",
- "remove": "Remove",
+ "stop": "Pysäytä",
+ "clear": "Tyhjää",
+ "remove": "Poista",
"send_line": "Send",
"command_input_placeholder": "Type command input...",
- "status_running": "Running",
- "status_stopped": "Stopped",
- "status_failed": "Failed",
+ "status_running": "Käynnissä",
+ "status_stopped": "Pysäytetty",
+ "status_failed": "Epäonnistunut",
"no_sessions": "No sessions created yet.",
"unnamed_session": "Unnamed session",
"select_or_create_session": "Select or create a session to begin.",
@@ -2535,9 +2534,9 @@
"failed_to_send_input": "Failed to send RNSH input",
"listening_on": "Listening on",
"waiting_for_address": "Waiting for listener address...",
- "copy_address": "Copy",
+ "copy_address": "Kopioi",
"address_copied": "Address copied to clipboard",
- "failed_to_copy_address": "Failed to copy address",
+ "failed_to_copy_address": "Kopiointi epäonnistui",
"config_dir": "Reticulum config directory",
"config_dir_placeholder": "Defaults to the app's Reticulum config",
"config_dir_hint": "Leave blank to share the MeshChatX Reticulum instance. Override only to use a separate Reticulum config directory."
@@ -2546,31 +2545,31 @@
"network_diagnostics": "Network Diagnostics",
"title": "RNProbe - Destination Probe",
"description": "Send probes with configurable size to measure RTT and delivery.",
- "destination_hash": "Destination Hash",
+ "destination_hash": "Kohteen tiiviste",
"full_destination_name": "Full Destination Name",
"probe_size_bytes": "Probe Size (bytes)",
"number_of_probes": "Number of Probes",
"wait_between_probes": "Wait Between Probes (seconds)",
"start_probe": "Start Probe",
- "stop": "Stop",
- "clear_results": "Clear Results",
+ "stop": "Pysäytä",
+ "clear_results": "Tyhjää tulokset",
"summary": "Summary",
- "sent": "Sent",
+ "sent": "Lähetetty",
"delivered": "Delivered",
"timeouts": "Timeouts",
- "failed": "Failed",
+ "failed": "Epäonnistunut",
"probe_results": "Probe Results",
"probe_responses_realtime": "Probe responses in real time",
"no_probes_yet": "No probes yet. Start a probe to test connectivity.",
"probe_number": "Probe #{number}",
"bytes": "bytes",
- "hops": "Hops",
+ "hops": "Hypyt",
"rtt": "RTT",
"rssi": "RSSI",
"snr": "SNR",
- "quality": "Quality",
+ "quality": "Laatu",
"timeout": "Timeout",
- "invalid_hash": "Invalid destination hash!",
+ "invalid_hash": "Kohteen tiiviste ei kelpaa!",
"provide_full_name": "Please provide a full destination name!",
"failed_to_probe": "Failed to probe destination"
},
@@ -2578,7 +2577,7 @@
"network_diagnostics": "Network Diagnostics",
"title": "RNStatus - Network Status",
"description": "Per-interface statistics and link status from your RNS instance.",
- "refresh": "Refresh",
+ "refresh": "Virkistä",
"include_link_stats": "Include Link Stats",
"sort_by": "Sort by:",
"none": "None",
@@ -2586,13 +2585,13 @@
"rx_bytes": "RX Bytes",
"tx_bytes": "TX Bytes",
"total_traffic": "Total Traffic",
- "announces": "Announces",
+ "announces": "Kuulutukset",
"active_links": "Active Links: {count}",
"no_interfaces_found": "No interfaces found. Click refresh to load status.",
"mode": "Mode",
"rx_packets": "RX Packets",
"tx_packets": "TX Packets",
- "clients": "Clients",
+ "clients": "Asiakkaat",
"peers_reachable": "reachable",
"noise_floor": "Noise Floor",
"interference": "Interference",
@@ -2608,7 +2607,7 @@
},
"translator": {
"text_translation": "Text Translation",
- "title": "Translator",
+ "title": "Kääntäjä",
"description": "Translate text via a LibreTranslate server or local Argos Translate.",
"argos_translate": "Argos Translate",
"libretranslate": "LibreTranslate",
@@ -2635,9 +2634,9 @@
"enter_text_placeholder": "Enter text to translate...",
"translate": "Translate",
"swap": "Swap",
- "clear": "Clear",
+ "clear": "Tyhjää",
"translation": "Translation",
- "source": "Source",
+ "source": "Lähde",
"detected": "Detected",
"available_languages": "Available Languages",
"languages_loaded_from": "Languages are loaded from LibreTranslate API or Argos Translate packages.",
@@ -2646,12 +2645,12 @@
"failed_translate": "Translation failed. Make sure LibreTranslate is running or Argos Translate is installed.",
"select_languages_warning": "Please select both source and target languages.",
"auto_detect_not_supported": "Auto-detection is not supported with Argos Translate. Please select a source language.",
- "copied_to_clipboard": "Copied to clipboard"
+ "copied_to_clipboard": "Kopioitu leikepöydälle"
},
"call": {
"phone": "Phone",
"voicemail": "Voicemail",
- "settings": "Settings",
+ "settings": "Asetukset",
"unknown": "Unknown",
"call_ended": "Call Ended",
"call_declined": "Call Declined",
@@ -2676,16 +2675,16 @@
"unmute_mic": "Unmute Mic",
"mute_speaker": "Mute Speaker",
"unmute_speaker": "Unmute Speaker",
- "telephone": "Telephone",
+ "telephone": "Puhelin",
"enter_identity_hash_to_call": "Enter an identity to call.",
- "identity_hash": "Identity Hash",
+ "identity_hash": "Identiteetin tiiviste",
"call_history": "Call History",
"call_back": "Call Back",
"no_voicemails": "No Voicemails",
"voicemails_will_appear_here": "When people leave you messages, they'll show up here.",
"voicemail_inbox": "Voicemail Inbox",
- "messages": "Messages",
- "delete": "Delete",
+ "messages": "Viestit",
+ "delete": "Poista",
"voicemail_settings": "Voicemail Settings",
"dependencies_missing": "Dependencies Missing",
"voicemail_requires_espeak": "Voicemail requires `espeak-ng` to generate greetings. Please install it on your system.",
@@ -2715,10 +2714,10 @@
"download_rx": "Download RX",
"download_tx": "Download TX",
"minimize": "Minimize",
- "active": "Active",
+ "active": "Käytössä",
"default_quality": "Default Quality",
- "active_call": "Active Call",
- "status": "Status",
+ "active_call": "Käynnissä oleva puhelu",
+ "status": "Tila",
"failed_to_answer_call": "Failed to answer call",
"failed_to_hangup_call": "Failed to hangup call",
"failed_to_toggle_microphone": "Failed to toggle microphone",
@@ -2803,7 +2802,7 @@
"failed_save_ringtone": "Failed to save edited ringtone"
},
"contacts": {
- "title": "Contacts",
+ "title": "Yhteystiedot",
"description": "Manage your contact list and share/import identities.",
"search_placeholder": "Search contacts...",
"actions": "Actions",
@@ -2815,11 +2814,11 @@
"hash_or_uri": "LXMF Hash or URI",
"hash_or_uri_placeholder": "32-char hash, lxmf://..., or lxma://...",
"paste": "Paste",
- "failed_load_contacts": "Failed to load contacts",
+ "failed_load_contacts": "Yhteystietojen lataus epäonnistui",
"invalid_contact_input": "Invalid input. Use a 32-char hash or lxma:// URI.",
"contact_already_exists": "Contact already exists",
"contact_added": "Contact added",
- "failed_add_contact": "Failed to add contact",
+ "failed_add_contact": "Yhteyshenkilön lisääminen epäonnistui",
"remove_contact": "Remove Contact",
"remove_contact_confirm": "Remove this contact?",
"contact_removed": "Contact removed",
@@ -2831,18 +2830,18 @@
"share_my_identity": "Share My Identity",
"identity_uri_copied": "Identity URI copied to clipboard",
"share": "Share",
- "scan_qr": "Scan QR Code",
+ "scan_qr": "Lue QR-koodi",
"scanner_hint": "Point camera at an identity QR code.",
- "camera_not_supported": "Camera QR scanning is not supported in this browser.",
- "camera_permission_denied": "Camera permission denied. Please allow camera access.",
- "camera_not_found": "No camera device found.",
- "camera_failed": "Failed to start camera scanner.",
+ "camera_not_supported": "Selain ei tue kameran QR-lukua.",
+ "camera_permission_denied": "Kameralupa evätty. Salli kameran käyttö.",
+ "camera_not_found": "Kameraa ei löytynyt.",
+ "camera_failed": "Kameralukijan käynnistys epäonnistui.",
"qr_scanned": "QR code scanned",
"importing_lxma": "Importing LXMA contact...",
"send_message": "Send Message",
- "call_contact": "Call",
+ "call_contact": "Puhelu",
"export_contacts": "Export",
- "import_contacts": "Import",
+ "import_contacts": "Tuo",
"export_success": "Contacts exported",
"export_failed": "Failed to export contacts",
"import_success": "Imported {added} contact(s)",
@@ -2861,7 +2860,7 @@
"setup_external_desc": "Android/data/com.meshchatx/files/meshchatx — visible in many file managers.",
"setup_internal_title": "Private app storage",
"setup_internal_desc": "Hidden from file managers; only this app can access it.",
- "setup_continue": "Continue",
+ "setup_continue": "Jatka",
"upgrade_title": "Move data to file-manager storage?",
"upgrade_desc": "Your MeshChatX data is in private app storage. Copy it to the file-manager folder so you can browse and back up files, then restart the app.",
"upgrade_copy": "Copy and restart",
@@ -2872,7 +2871,7 @@
"failed": "Could not update storage location."
},
"tutorial": {
- "title": "Getting Started",
+ "title": "Aloitus",
"welcome": "Welcome to",
"welcome_desc": "The future of off-grid communication. Secure, decentralized, and unstoppable.",
"migration_title": "Earlier install folder detected",
@@ -2897,7 +2896,7 @@
"archiver": "Archiver",
"archiver_desc": "Manual and Automated page archiving.",
"archiver_desc_page": "Manual and Automated page archiving tools for offline browsing.",
- "banishment": "Banishment",
+ "banishment": "Karkotus",
"banishment_desc": "Banish annoying people, nodes and support for RNS blackhole level dropping their announces",
"palette": "Command Palette + Keybindings",
"palette_desc": "Navigate everything instantly and customize shortcuts.",
@@ -2906,10 +2905,10 @@
"i18n_desc": "Available in English, German, Italian, Russian, Dutch, French, and Spanish.",
"i18n_desc_page": "Full internationalization support for English, German, Italian, Russian, Dutch, French, and Spanish.",
"more_features": "+ many more features!",
- "connect": "Connect to the Mesh",
+ "connect": "Yhdistä mesh-verkkoon",
"connect_desc": "To send messages, you need to connect to a Reticulum interface.",
"connect_desc_page": "Use one of the public networks below or add a custom interface from the Interfaces page.",
- "identity_title": "Identity",
+ "identity_title": "Identiteetti",
"identity_desc": "Choose a new identity or import an existing key before connecting.",
"identity_desc_page": "Choose a new identity or import an existing key before connecting to the mesh.",
"identity_new": "New Identity (default)",
@@ -2935,7 +2934,7 @@
"learn_create_desc": "Discover how to use MeshChatX to its full potential.",
"learn_create_desc_page": "Discover how to use MeshChatX to its full potential and create your own content.",
"learn_create_more": "More to explore",
- "documentation": "Documentation",
+ "documentation": "Dokumentaatio",
"documentation_desc": "Read the official MeshChatX and Reticulum documentation.",
"documentation_desc_page": "Guides for MeshChatX and the Reticulum stack.",
"meshchatx_docs": "MeshChatX Docs",
@@ -2947,7 +2946,7 @@
"micron_editor_desc_page": "Learn how to create mesh-native pages and interactive content using the Micron markup language.",
"open_micron_editor": "Open Micron Editor",
"open_mesh_server": "Open Mesh Server",
- "open_identities": "Identities",
+ "open_identities": "Identiteetit",
"identities_card_title": "Multiple identities",
"identities_card_desc": "Switch personas, export keys, and keep separate profiles on one device.",
"identities_card_desc_page": "Run multiple Reticulum identities on one install: create and delete personas, switch who you are on the mesh, and export keys when you need them.",
@@ -2959,7 +2958,7 @@
"explore_nodes_desc": "Open the map or network graph.",
"voice_calls": "Voice Calls",
"voice_calls_desc": "Place and receive voice calls.",
- "ready": "Ready to Roll!",
+ "ready": "Valmis aloittamaan!",
"ready_desc": "Everything is set up. Reticulum has been restarted with your new configuration.",
"ready_desc_page": "MeshChatX is now configured and Reticulum has been hot-reloaded with your new settings.",
"docker_note": "Reticulum was restarted automatically. If anything looks off, you can restart MeshChatX from the menu.",
@@ -2971,7 +2970,7 @@
"restart_start": "Start MeshChatX",
"finish_setup": "Finish Setup",
"skip_setup": "Skip Setup",
- "continue": "Continue",
+ "continue": "Jatka",
"skip_confirm": "Are you sure you want to skip the setup? You'll need to manually add interfaces later.",
"discovery_question": "Do you want to use community interface discovering and auto-connect?",
"discovery_desc": "This allows MeshChatX to automatically find and connect to public community nodes near you or on the internet.",
@@ -3000,7 +2999,7 @@
"bootstrap_desc_page": "Bootstrap nodes give Reticulum a starting point so it can discover the rest of the network. Select one or more from discovered or community nodes below.",
"bootstrap_discovered": "Discovered Nodes",
"bootstrap_community": "Community Nodes",
- "bootstrap_selected": "{count} selected",
+ "bootstrap_selected": "{count} valittu",
"bootstrap_skip": "Skip for now",
"bootstrap_confirm": "Add selected and restart RNS",
"bootstrap_added": "Added {count} bootstrap interface(s)",
@@ -3014,7 +3013,7 @@
"failed_add_local": "Failed to add local interface",
"failed_reload_rns": "Failed to restart Reticulum",
"ready_finished": "Reticulum has been restarted with your new configuration",
- "propagation": "Propagation Node",
+ "propagation": "Levityssolmu",
"propagation_question": "Do you want to auto-configure propagation mode?",
"propagation_desc": "Propagation nodes act like an always-on mailbox for your messages. They securely store messages while you are offline and deliver them as soon as you reconnect to the network.",
"propagation_auto": "Auto-configure will automatically find and connect to the most reliable propagation node available. If no node is currently available, MeshChatX will wait for one to appear. Until then, offline message syncing will be unavailable.",
@@ -3029,20 +3028,20 @@
"no_results": "No results found for \"{query}\"",
"group_actions": "Actions",
"group_recent": "Recent Peers",
- "group_contacts": "Contacts",
+ "group_contacts": "Yhteystiedot",
"footer_navigate": "Navigate",
- "footer_select": "Select",
- "nav_messages": "Messages",
+ "footer_select": "Valitse",
+ "nav_messages": "Viestit",
"nav_messages_desc": "Conversations and LXMF inbox",
- "nav_nomad": "Nomad Network",
+ "nav_nomad": "Nomad-verkko",
"nav_nomad_desc": "Browse Nomad pages and services",
- "nav_map": "Map",
+ "nav_map": "Kartta",
"nav_map_desc": "Geographic map and layers",
"nav_paper": "Paper Messages",
"nav_paper_desc": "Signed paper messages (QR)",
"nav_call": "Voice Calls",
"nav_call_desc": "Voice calls over the mesh",
- "nav_settings": "Settings",
+ "nav_settings": "Asetukset",
"nav_settings_desc": "App and transport preferences",
"nav_ping": "Ping",
"nav_ping_desc": "Measure RTT to a destination",
@@ -3056,11 +3055,11 @@
"nav_rnpath_desc": "Paths and announce queues",
"nav_rnpath_trace": "RNPath Trace",
"nav_rnpath_trace_desc": "Hop list toward a hash",
- "nav_translator": "Translator",
+ "nav_translator": "Kääntäjä",
"nav_translator_desc": "Translate message text",
"nav_forwarder": "Forwarder",
"nav_forwarder_desc": "LXMF forwarding rules",
- "nav_documentation": "Documentation",
+ "nav_documentation": "Dokumentaatio",
"nav_documentation_desc": "Offline manuals",
"nav_repository_server": "Repository server",
"nav_repository_server_desc": "MeshChatX wheels, Reticulum packages, and your files over HTTP",
@@ -3070,13 +3069,13 @@
"nav_reticulum_config_editor_desc": "Edit the raw Reticulum config file",
"nav_rnode_flasher": "RNode Flasher",
"nav_rnode_flasher_desc": "Device firmware update",
- "nav_debug_logs": "Debug Logs",
+ "nav_debug_logs": "Vianetsintälokit",
"nav_debug_logs_desc": "Application and access logs",
- "action_sync": "Sync Messages",
+ "action_sync": "Synkronoi viestit",
"action_sync_desc": "Sync with your propagation node",
"action_compose": "Compose Message",
"action_compose_desc": "New LXMF message",
- "action_getting_started": "Getting Started",
+ "action_getting_started": "Aloitus",
"action_getting_started_desc": "Open the setup guide",
"action_changelog": "Changelog",
"action_changelog_desc": "Recent changes"
diff --git a/meshchatx/src/frontend/locales/fr.json b/meshchatx/src/frontend/locales/fr.json
index b62fcaa9..f4f6c2ae 100644
--- a/meshchatx/src/frontend/locales/fr.json
+++ b/meshchatx/src/frontend/locales/fr.json
@@ -406,6 +406,7 @@
"open": "Ouvrir",
"close": "Fermer",
"cancel": "Annuler",
+ "select": "Sélectionner",
"save": "Enregistrer",
"block": "Bannir",
"delete": "Supprimer",
@@ -1484,7 +1485,21 @@
"micron_wasm_update_err_activate_failed": "Impossible de charger le fichier installé (vérifiez la compatibilité wasm_exec ou essayez une autre build). Le remplacement a été supprimé.",
"micron_wasm_update_toast_installed": "Micron WASM {tag} installé.",
"micron_wasm_update_toast_uploaded": "WASM installé depuis votre fichier.",
- "micron_wasm_update_toast_reverted": "WASM Micron fourni avec l’application rétabli."
+ "micron_wasm_update_toast_reverted": "WASM Micron fourni avec l’application rétabli.",
+ "tabs": {
+ "general": "General",
+ "general_desc": "Language, appearance, and platform",
+ "messages": "Messages",
+ "messages_desc": "LXMF, stickers, and safety",
+ "network": "Network",
+ "network_desc": "Transport, interfaces, and discovery",
+ "nomad": "Nomad",
+ "nomad_desc": "Archiver and page rendering",
+ "privacy": "Privacy",
+ "privacy_desc": "Data, access, and security",
+ "maintenance": "Maintenance",
+ "maintenance_desc": "Cleanup, export, and import"
+ }
},
"debug": {
"title": "Débogues",
@@ -1577,7 +1592,16 @@
"node": "Noeud",
"blocked_destinations": "Destinations bloquées",
"banishment_lifted": "Interdiction levée avec succès",
- "failed_lift_banishment": "Échec à la levée du bannissement"
+ "failed_lift_banishment": "Échec à la levée du bannissement",
+ "lift_selected": "Lever le bannissement ({count})",
+ "lift_selected_confirm": "Lever le bannissement pour {count} éléments sélectionnés ?",
+ "lift_selected_success": "Bannissement levé pour {count} éléments",
+ "filter_all_types": "Tous les types",
+ "filter_rns": "Blackhole RNS",
+ "sort_newest": "Plus récents",
+ "sort_oldest": "Plus anciens",
+ "sort_name": "Nom A-Z",
+ "result_count": "{count} éléments"
},
"nomadnet": {
"remove_favourite": "Supprimer favori",
@@ -1720,7 +1744,22 @@
"showing_range": "Affichage des archives{start}à{end}des archives{total}",
"page_of": "Page {page} sur {total_pages}",
"export_mu": "Exportation .mu",
- "export_selected_mu": "Exportation .mu ({count})"
+ "export_selected_mu": "Exportation .mu ({count})",
+ "nodes_title": "Nodes",
+ "snapshots_title": "Snapshots",
+ "select_all": "Select all",
+ "delete_selected": "Delete ({count})",
+ "viewing_archive": "Viewing archive",
+ "select_snapshot": "Select a snapshot to view",
+ "open_live": "Open live",
+ "search_nodes_placeholder": "Search nodes or content...",
+ "no_results": "No results found",
+ "no_archives": "No archives yet",
+ "show_nodes": "Show nodes",
+ "hide_nodes": "Hide nodes",
+ "show_snapshots": "Show snapshots",
+ "hide_snapshots": "Hide snapshots",
+ "delete_snapshot": "Delete snapshot"
},
"docs": {
"title": "Documentation",
@@ -2966,7 +3005,7 @@
"host_rooms": "salons",
"host_private": "privé",
"host_delete_room": "Supprimer le salon",
- "host_no_rooms": "Aucun salon pour l'instant. Créez un salon ci-dessous.",
+ "host_no_rooms": "Aucun salon pour l'instant.",
"host_room_name": "nom du salon",
"host_room_topic": "sujet (optionnel)",
"host_add_room": "Ajouter un salon",
@@ -3012,7 +3051,6 @@
"host_members_search": "Rechercher des membres...",
"host_rooms_search": "Rechercher des salons...",
"host_rooms_search_empty": "Aucun salon ne correspond à la recherche.",
- "host_no_rooms": "Aucun salon pour l'instant.",
"host_moderation_uptime": "{time} de disponibilité",
"host_moderation_members": "{count} membres",
"host_members_select": "Sélectionnez un membre pour voir les messages et modérer",
diff --git a/meshchatx/src/frontend/locales/it.json b/meshchatx/src/frontend/locales/it.json
index 282656ff..6986e4d5 100644
--- a/meshchatx/src/frontend/locales/it.json
+++ b/meshchatx/src/frontend/locales/it.json
@@ -406,6 +406,7 @@
"open": "Apri",
"close": "Chiudi",
"cancel": "Annulla",
+ "select": "Seleziona",
"save": "Salva",
"block": "Esilia",
"delete": "Elimina",
@@ -1536,7 +1537,21 @@
"micron_wasm_update_err_activate_failed": "Impossibile caricare il file installato (controlla compatibilità wasm_exec o prova un’altra build). Sostituzione rimossa.",
"micron_wasm_update_toast_installed": "Micron WASM {tag} installato.",
"micron_wasm_update_toast_uploaded": "WASM installato dal tuo file.",
- "micron_wasm_update_toast_reverted": "Ripristinato il WASM Micron incluso nell’app."
+ "micron_wasm_update_toast_reverted": "Ripristinato il WASM Micron incluso nell’app.",
+ "tabs": {
+ "general": "General",
+ "general_desc": "Language, appearance, and platform",
+ "messages": "Messages",
+ "messages_desc": "LXMF, stickers, and safety",
+ "network": "Network",
+ "network_desc": "Transport, interfaces, and discovery",
+ "nomad": "Nomad",
+ "nomad_desc": "Archiver and page rendering",
+ "privacy": "Privacy",
+ "privacy_desc": "Data, access, and security",
+ "maintenance": "Maintenance",
+ "maintenance_desc": "Cleanup, export, and import"
+ }
},
"debug": {
"title": "Log di Debug",
@@ -1629,7 +1644,16 @@
"node": "Nodo",
"blocked_destinations": "Destinazioni bloccate",
"banishment_lifted": "Esilio revocato con successo",
- "failed_lift_banishment": "Impossibile revocare l'esilio"
+ "failed_lift_banishment": "Impossibile revocare l'esilio",
+ "lift_selected": "Revoca esilio ({count})",
+ "lift_selected_confirm": "Revocare l'esilio per {count} elementi selezionati?",
+ "lift_selected_success": "Esilio revocato per {count} elementi",
+ "filter_all_types": "Tutti i tipi",
+ "filter_rns": "Blackhole RNS",
+ "sort_newest": "Più recenti",
+ "sort_oldest": "Più vecchi",
+ "sort_name": "Nome A-Z",
+ "result_count": "{count} elementi"
},
"nomadnet": {
"remove_favourite": "Rimuovi dai Preferiti",
@@ -1772,7 +1796,22 @@
"showing_range": "Visualizzazione da {start} a {end} di {total} archivi",
"page_of": "Pagina {page} di {total_pages}",
"export_mu": "Esporta .mu",
- "export_selected_mu": "Esporta .mu ({count})"
+ "export_selected_mu": "Esporta .mu ({count})",
+ "nodes_title": "Nodes",
+ "snapshots_title": "Snapshots",
+ "select_all": "Select all",
+ "delete_selected": "Delete ({count})",
+ "viewing_archive": "Viewing archive",
+ "select_snapshot": "Select a snapshot to view",
+ "open_live": "Open live",
+ "search_nodes_placeholder": "Search nodes or content...",
+ "no_results": "No results found",
+ "no_archives": "No archives yet",
+ "show_nodes": "Show nodes",
+ "hide_nodes": "Hide nodes",
+ "show_snapshots": "Show snapshots",
+ "hide_snapshots": "Hide snapshots",
+ "delete_snapshot": "Delete snapshot"
},
"docs": {
"title": "Documentazione",
@@ -2966,7 +3005,7 @@
"host_rooms": "stanze",
"host_private": "privata",
"host_delete_room": "Elimina stanza",
- "host_no_rooms": "Nessuna stanza. Crea una stanza qui sotto.",
+ "host_no_rooms": "Nessuna stanza ancora.",
"host_room_name": "nome stanza",
"host_room_topic": "argomento (opzionale)",
"host_add_room": "Aggiungi stanza",
@@ -3012,7 +3051,6 @@
"host_members_search": "Cerca membri...",
"host_rooms_search": "Cerca stanze...",
"host_rooms_search_empty": "Nessuna stanza corrisponde alla ricerca.",
- "host_no_rooms": "Nessuna stanza ancora.",
"host_moderation_uptime": "{time} di attività",
"host_moderation_members": "{count} membri",
"host_members_select": "Seleziona un membro per vedere i messaggi e moderare",
diff --git a/meshchatx/src/frontend/locales/nl.json b/meshchatx/src/frontend/locales/nl.json
index 3ba22289..d1336176 100644
--- a/meshchatx/src/frontend/locales/nl.json
+++ b/meshchatx/src/frontend/locales/nl.json
@@ -406,6 +406,7 @@
"open": "Open",
"close": "Sluiten",
"cancel": "Annuleren",
+ "select": "Selecteren",
"save": "Opslaan",
"block": "Verboden",
"delete": "Verwijderen",
@@ -1484,7 +1485,21 @@
"micron_wasm_update_err_activate_failed": "Geïnstalleerd bestand kon niet worden geladen (controleer wasm_exec-compatibiliteit of probeer een andere build). Overschrijving is verwijderd.",
"micron_wasm_update_toast_installed": "Micron WASM {tag} geïnstalleerd.",
"micron_wasm_update_toast_uploaded": "WASM geïnstalleerd vanaf uw bestand.",
- "micron_wasm_update_toast_reverted": "Gebundelde Micron WASM hersteld."
+ "micron_wasm_update_toast_reverted": "Gebundelde Micron WASM hersteld.",
+ "tabs": {
+ "general": "General",
+ "general_desc": "Language, appearance, and platform",
+ "messages": "Messages",
+ "messages_desc": "LXMF, stickers, and safety",
+ "network": "Network",
+ "network_desc": "Transport, interfaces, and discovery",
+ "nomad": "Nomad",
+ "nomad_desc": "Archiver and page rendering",
+ "privacy": "Privacy",
+ "privacy_desc": "Data, access, and security",
+ "maintenance": "Maintenance",
+ "maintenance_desc": "Cleanup, export, and import"
+ }
},
"debug": {
"title": "Debuglogs",
@@ -1577,7 +1592,16 @@
"node": "Knooppunt",
"blocked_destinations": "Geblokkeerde bestemmingen",
"banishment_lifted": "Verbanning succesvol opgeheven",
- "failed_lift_banishment": "Kon verbanning niet opheffen"
+ "failed_lift_banishment": "Kon verbanning niet opheffen",
+ "lift_selected": "Verbanning opheffen ({count})",
+ "lift_selected_confirm": "Verbanning opheffen voor {count} geselecteerde items?",
+ "lift_selected_success": "Verbanning opgeheven voor {count} items",
+ "filter_all_types": "Alle typen",
+ "filter_rns": "RNS blackhole",
+ "sort_newest": "Nieuwste eerst",
+ "sort_oldest": "Oudste eerst",
+ "sort_name": "Naam A-Z",
+ "result_count": "{count} items"
},
"nomadnet": {
"remove_favourite": "Favoriet verwijderen",
@@ -1720,7 +1744,22 @@
"showing_range": "{start}tonen naar{end}van{total}archieven",
"page_of": "Bladzijde{page}van{total_pages}",
"export_mu": "Exporteren .mu",
- "export_selected_mu": "Export .mu ({count})"
+ "export_selected_mu": "Export .mu ({count})",
+ "nodes_title": "Nodes",
+ "snapshots_title": "Snapshots",
+ "select_all": "Select all",
+ "delete_selected": "Delete ({count})",
+ "viewing_archive": "Viewing archive",
+ "select_snapshot": "Select a snapshot to view",
+ "open_live": "Open live",
+ "search_nodes_placeholder": "Search nodes or content...",
+ "no_results": "No results found",
+ "no_archives": "No archives yet",
+ "show_nodes": "Show nodes",
+ "hide_nodes": "Hide nodes",
+ "show_snapshots": "Show snapshots",
+ "hide_snapshots": "Hide snapshots",
+ "delete_snapshot": "Delete snapshot"
},
"docs": {
"title": "Documentatie",
@@ -2966,7 +3005,7 @@
"host_rooms": "kamers",
"host_private": "privé",
"host_delete_room": "Kamer verwijderen",
- "host_no_rooms": "Nog geen kamers. Maak hieronder een kamer aan.",
+ "host_no_rooms": "Nog geen kamers.",
"host_room_name": "kamernaam",
"host_room_topic": "onderwerp (optioneel)",
"host_add_room": "Kamer toevoegen",
@@ -3012,7 +3051,6 @@
"host_members_search": "Leden zoeken...",
"host_rooms_search": "Kamers zoeken...",
"host_rooms_search_empty": "Geen kamers komen overeen met je zoekopdracht.",
- "host_no_rooms": "Nog geen kamers.",
"host_moderation_uptime": "{time} uptime",
"host_moderation_members": "{count} leden",
"host_members_select": "Selecteer een lid om berichten te bekijken en te modereren",
diff --git a/meshchatx/src/frontend/locales/ru.json b/meshchatx/src/frontend/locales/ru.json
index 00b39dd9..aae4a415 100644
--- a/meshchatx/src/frontend/locales/ru.json
+++ b/meshchatx/src/frontend/locales/ru.json
@@ -406,6 +406,7 @@
"open": "Открыть",
"close": "Закрыть",
"cancel": "Отмена",
+ "select": "Выбрать",
"save": "Сохранить",
"block": "Заблокировать",
"delete": "Удалить",
@@ -1631,7 +1632,22 @@
"showing_range": "Показано с {start} по {end} из {total} архивов",
"page_of": "Страница {page} из {total_pages}",
"export_mu": "Экспорт .mu",
- "export_selected_mu": "Экспорт .mu ({count})"
+ "export_selected_mu": "Экспорт .mu ({count})",
+ "nodes_title": "Nodes",
+ "snapshots_title": "Snapshots",
+ "select_all": "Select all",
+ "delete_selected": "Delete ({count})",
+ "viewing_archive": "Viewing archive",
+ "select_snapshot": "Select a snapshot to view",
+ "open_live": "Open live",
+ "search_nodes_placeholder": "Search nodes or content...",
+ "no_results": "No results found",
+ "no_archives": "No archives yet",
+ "show_nodes": "Show nodes",
+ "hide_nodes": "Hide nodes",
+ "show_snapshots": "Show snapshots",
+ "hide_snapshots": "Hide snapshots",
+ "delete_snapshot": "Delete snapshot"
},
"docs": {
"title": "Документация",
@@ -2796,7 +2812,21 @@
"micron_wasm_update_err_activate_failed": "Не удалось загрузить установленный файл (проверьте совместимость wasm_exec или другую сборку). Переопределение удалено.",
"micron_wasm_update_toast_installed": "Установлен Micron WASM {tag}.",
"micron_wasm_update_toast_uploaded": "WASM установлен из вашего файла.",
- "micron_wasm_update_toast_reverted": "Восстановлен встроенный Micron WASM."
+ "micron_wasm_update_toast_reverted": "Восстановлен встроенный Micron WASM.",
+ "tabs": {
+ "general": "General",
+ "general_desc": "Language, appearance, and platform",
+ "messages": "Messages",
+ "messages_desc": "LXMF, stickers, and safety",
+ "network": "Network",
+ "network_desc": "Transport, interfaces, and discovery",
+ "nomad": "Nomad",
+ "nomad_desc": "Archiver and page rendering",
+ "privacy": "Privacy",
+ "privacy_desc": "Data, access, and security",
+ "maintenance": "Maintenance",
+ "maintenance_desc": "Cleanup, export, and import"
+ }
},
"debug": {
"title": "Журнал отладки",
@@ -2889,7 +2919,16 @@
"node": "Node",
"blocked_destinations": "Заблокированные направления",
"banishment_lifted": "Banishment lifted successfully",
- "failed_lift_banishment": "Failed to lift banishment"
+ "failed_lift_banishment": "Failed to lift banishment",
+ "lift_selected": "Lift banishment ({count})",
+ "lift_selected_confirm": "Lift banishment for {count} selected items?",
+ "lift_selected_success": "Lifted banishment for {count} items",
+ "filter_all_types": "All types",
+ "filter_rns": "RNS blackhole",
+ "sort_newest": "Newest first",
+ "sort_oldest": "Oldest first",
+ "sort_name": "Name A-Z",
+ "result_count": "{count} items"
},
"relay_chat": {
"title": "Релейный чат",
@@ -2966,7 +3005,7 @@
"host_rooms": "комнат",
"host_private": "приватная",
"host_delete_room": "Удалить комнату",
- "host_no_rooms": "Пока нет комнат. Создайте комнату ниже.",
+ "host_no_rooms": "Пока нет комнат.",
"host_room_name": "название комнаты",
"host_room_topic": "тема (необязательно)",
"host_add_room": "Добавить комнату",
@@ -3012,7 +3051,6 @@
"host_members_search": "Поиск участников...",
"host_rooms_search": "Поиск комнат...",
"host_rooms_search_empty": "Нет комнат по вашему запросу.",
- "host_no_rooms": "Пока нет комнат.",
"host_moderation_uptime": "Аптайм {time}",
"host_moderation_members": "{count} участников",
"host_members_select": "Выберите участника, чтобы просмотреть сообщения и модерировать",
diff --git a/meshchatx/src/frontend/locales/zh.json b/meshchatx/src/frontend/locales/zh.json
index c9ec279b..8af27264 100644
--- a/meshchatx/src/frontend/locales/zh.json
+++ b/meshchatx/src/frontend/locales/zh.json
@@ -406,6 +406,7 @@
"open": "打开",
"close": "关闭",
"cancel": "取消",
+ "select": "选择",
"save": "保存",
"block": "阻止",
"delete": "删除",
@@ -1484,7 +1485,21 @@
"micron_wasm_update_err_activate_failed": "无法加载已安装的文件(请检查 wasm_exec 兼容性或尝试其他构建)。已移除覆盖。",
"micron_wasm_update_toast_installed": "已安装 Micron WASM {tag}。",
"micron_wasm_update_toast_uploaded": "已从您的文件安装 WASM。",
- "micron_wasm_update_toast_reverted": "已恢复为打包的 Micron WASM。"
+ "micron_wasm_update_toast_reverted": "已恢复为打包的 Micron WASM。",
+ "tabs": {
+ "general": "General",
+ "general_desc": "Language, appearance, and platform",
+ "messages": "Messages",
+ "messages_desc": "LXMF, stickers, and safety",
+ "network": "Network",
+ "network_desc": "Transport, interfaces, and discovery",
+ "nomad": "Nomad",
+ "nomad_desc": "Archiver and page rendering",
+ "privacy": "Privacy",
+ "privacy_desc": "Data, access, and security",
+ "maintenance": "Maintenance",
+ "maintenance_desc": "Cleanup, export, and import"
+ }
},
"debug": {
"title": "调试日志",
@@ -1577,7 +1592,16 @@
"node": "节点",
"blocked_destinations": "被阻止的目的地",
"banishment_lifted": "放逐已解除",
- "failed_lift_banishment": "解除放逐失败"
+ "failed_lift_banishment": "解除放逐失败",
+ "lift_selected": "解除放逐 ({count})",
+ "lift_selected_confirm": "确定要解除所选的 {count} 项放逐吗?",
+ "lift_selected_success": "已解除 {count} 项放逐",
+ "filter_all_types": "所有类型",
+ "filter_rns": "RNS 黑洞",
+ "sort_newest": "最新优先",
+ "sort_oldest": "最早优先",
+ "sort_name": "名称 A-Z",
+ "result_count": "{count} 项"
},
"nomadnet": {
"remove_favourite": "移除收藏",
@@ -1720,7 +1744,22 @@
"showing_range": "显示{start}到{end}的{total}档案",
"page_of": "{total_pages}第{page}页",
"export_mu": "导出.mu",
- "export_selected_mu": "导出 .mu ({count})"
+ "export_selected_mu": "导出 .mu ({count})",
+ "nodes_title": "Nodes",
+ "snapshots_title": "Snapshots",
+ "select_all": "Select all",
+ "delete_selected": "Delete ({count})",
+ "viewing_archive": "Viewing archive",
+ "select_snapshot": "Select a snapshot to view",
+ "open_live": "Open live",
+ "search_nodes_placeholder": "Search nodes or content...",
+ "no_results": "No results found",
+ "no_archives": "No archives yet",
+ "show_nodes": "Show nodes",
+ "hide_nodes": "Hide nodes",
+ "show_snapshots": "Show snapshots",
+ "hide_snapshots": "Hide snapshots",
+ "delete_snapshot": "Delete snapshot"
},
"docs": {
"title": "文档",
@@ -2966,7 +3005,7 @@
"host_rooms": "房间",
"host_private": "私有",
"host_delete_room": "删除房间",
- "host_no_rooms": "暂无房间。在下方创建房间。",
+ "host_no_rooms": "暂无房间。",
"host_room_name": "房间名称",
"host_room_topic": "主题(可选)",
"host_add_room": "添加房间",
@@ -3012,7 +3051,6 @@
"host_members_search": "搜索成员...",
"host_rooms_search": "搜索房间...",
"host_rooms_search_empty": "没有匹配的房间。",
- "host_no_rooms": "暂无房间。",
"host_moderation_uptime": "运行 {time}",
"host_moderation_members": "{count} 名成员",
"host_members_select": "选择成员以查看消息并进行管理",
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────